2009-08-06 9 views
1

Ich bekomme ein Instrument Memory Leak mit diesem iPhone 3.0 SDK-Code.iPhone Memory Leak JSON Bibliothek

ich die JSON bin mit von http://code.google.com/p/json-framework/

ist hier mein Code:

// .h 
@property (nontatomic,retain) NSMutableArray *tweets; 


// .m 
import" JSON.h" 
@synthesize tweets; 
... 
    tweets = [[NSMutableArray alloc] init]; 

    NSURL *url = [NSURL URLWithString:@"http://www.someurl.com"]; 
    NSString *jsonString = [NSString stringWithContentsOfURL:url]; 
    NSArray *results = [jsonString JSONValue]; 
    NSArray *data = [results valueForKey:@"stories"]; 

    for(NSDictionary *tweet in data) { 
     TweetmemeData *tweetmeme = [[TweetmemeData alloc] initWithTweet:tweet]; 
     [tweets addObject:tweetmeme]; 
     [self debugDump:tweetmeme]; 
     [tweetmeme release]; 
    } 
    [results release]; 

    return tweets; 

Wenn möglich, bitte mehr über diese Form der Speicherverwaltung erklären. Ich bin mit Retain/Release sehr vertraut, habe aber offensichtlich Probleme bei der Implementierung :)

Danke!

+0

Beachten Sie, dass ich die NSArray * -Daten NICHT freigeben werde ... wenn ich eine Sperre erhalte. Auch, wenn ich RETAIN Ergebnisse scheint es zu helfen ... Vielen Dank im Voraus –

+0

Laut Konvention, da [JsonString JSONValue] enthält nicht die Worte "Alloc", "neu" oder "Kopie", es wahrscheinlich einen Autorelease-Zeiger zurückgegeben , was bedeutet, dass Sie das Array "results" nicht freigeben müssen. Gleiches gilt für das NSArray "data". –

+0

Scheint, dass 'Tweets' vielleicht automatisch freigegeben werden sollten - Sie ordnen/initieren es und geben es dann am Ende der Methode zurück. Wenn Tweets eine Eigenschaft ist, möchten Sie wahrscheinlich lieber self.tweets anstelle von Tweets verwenden, so dass sie bei der Initialisierung per Eigenschaftsdeklaration beibehalten werden. Ohne den ganzen Code, schwer zu sagen, aber von dem, was Sie gezeigt haben, scheinen die Dinge unausgewogen. – Hunter

Antwort

1

Es ist erwähnenswert, dass viele Lecks, die im Simulator auftreten, gar nicht auf der Hardware passieren. Verwenden Sie den Simulator oder testen Sie ihn am Telefon?

+0

Hallo! Danke für die Information. Ich benutze den Simulator .. wird das Gerät überprüfen. Beachten Sie, dass ich die NSArray * -Daten NICHT freigeben werde ... wenn ich eine Sperre erhalte. Auch, wenn ich RETAIN Ergebnisse scheint es zu helfen ... Vielen Dank im Voraus –

+0

Sie sollten auf Memory Management nachlesen, hier ist Apples offizielle Anleitung: http://developer.apple.com/iPhone/library/documentation/Cocoa/ Conceptual/MemoryMgmt/MemoryMgmt.html und hier ist ein weiterer ziemlich guter Artikel, den ich gefunden habe: http://akosma.com/2009/01/28/10-iphone-memory-management-tips/ – Sneakyness