J'ai une fuite de mémoire dans le scénario suivant. Je lis des données à toutes les 30 secondes, utilisez SBJSONParser pour le transformer en un dictionnaire, ajouter une notification et après utiliser les données pour le lier à un tableview:AsyncSocket et notifications - fuite de mémoire
// Read data and send notification
-(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
{
NSString *content = [[NSString alloc] initWithData:[data subDataWithRange:NSMakeRange(0, [data length] - 2)] encoding: NSUTF8StringEncoding];
// Line where leaks appear
NSMutableDictionary* dict = [[NSMutableDictionary alloc] initWithDictionary:[content JSONValue]];
[content release];
// Post notification
[[NSNotificationCenter defaultCenter] postNotificationName:@"BindData" object:nil userInfo:dict];
[dict release];
}
Sur un CustomViewController je l'observateur:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bindData) name:@"BindData" object:nil];
et la méthode BindData:
-(void)bindData:(NSNotification*)notification
{
NSAutoreleasePool* pool = [[NSAutoReleasePool alloc] init];
NSMutableArray* customers = [notification.userInfo objectForKey:@"Customers"];
for (NSDictionary* customer in customers)
{
Company* company = [[Company alloc] init];
company.name = [customer objectForKey:@"CompanyName"];
NSLog(@"Company name = %@", company.name);
[company release];
}
[pool drain];
}
le problème est le suivant: quand je mets company.name = quelque chose de ce dictionnaire, je reçois une fuite de mémoire sur la ligne: NSMutableDicti onary * dict = [[NSMutableDictionary alloc] initWithDictionary: [contenu JSONValue]]; qui ne cesse d'augmenter depuis que je lis toutes les 30 secondes.
J'apprécie toute aide que vous pouvez donner. Merci.
Merci pour votre commentaire. Je libère la dict dans mon code, j'ai juste oublié de l'ajouter dans le message initial, je l'édite juste, donc le problème est toujours là même si je relâche dict. – mit
Si c'est le cas, il n'y a pas de fuite dans le code que vous avez posté. Il est possible que ce soit dans une partie de ce qui n'était pas inclus ci-dessus. –