Ich habe einen Speicherverlust in dem folgenden Szenario. Ich lese Daten alle 30 Sekunden mit SBJSONParser es in ein Wörterbuch zu verwandeln, eine Benachrichtigung hinzufügen und nach die Daten verwenden, um es zu einem Tableview zu binden:AsyncSocket und Benachrichtigungen - Speicherverlust
// 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];
}
Auf einem CustomViewController Ich habe den Beobachter:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(bindData) name:@"BindData" object:nil];
und die BindData Methode:
-(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];
}
das Problem ist: wenn ich company.name = etwas von diesem Wörterbuch gesetzt, bekomme ich ein Speicherleck auf der Linie: NSMutableDicti onary * dict = [[NSMutableDictionary alloc] initWithDictionary: [Inhalt JSONValue]]; Das erhöht sich seit ich alle 30 Sekunden lese.
Ich schätze jede Hilfe, die Sie geben können. Vielen Dank.
Danke für Ihren Kommentar. Ich habe das Diktat in meinem Code freigegeben, ich habe nur vergessen, es in der ersten Nachricht hinzuzufügen, ich bearbeite es einfach, so dass das Problem immer noch besteht, auch wenn ich dict freigeben. – mit
Wenn das der Fall ist, dann gibt es kein Leck in dem Code, den Sie gepostet haben. Es ist möglich, dass es in einem Teil davon sein könnte, der oben nicht enthalten war. –