2009-08-26 6 views
0

Ich schreibe iPhone-Anwendung, die mehrere Ansichten verwendet, jeder mit eigenem Controller. Sie werden programmgesteuert mit initWithNibName: geladen und vor dem Wechsel zu einem anderen Controller freigegeben, sodass jeweils nur eine Ansicht sichtbar ist. Nach Freigabe der View-Controller (Ich habe überprüft, dass Dealloc aufgerufen wird) nicht alle Speicher freigegeben ist. Ich gebe alle Ausgänge frei, wenn ich den Controller lösche. Wenn Sie self.view im Dealloc des Controllers auf Null setzen, wird das Problem nicht gelöst. Speicherverbrauch wird größer, obwohl Lecks von Instrumenten keine Lecks zeigen.Wie wird der Ansichtscontroller, der von der Spitze geladen wurde, vollständig entladen?

Gibt es eine Möglichkeit, diese Ansichten mit ihren Controllern vollständig aus dem Speicher zu entfernen? Ich möchte die gleiche freie Speichermenge haben, bevor ein neuer Controller erstellt wird und nachdem er gelöscht wurde.

Antwort

2

Sie können das Zurückhalten und Freigeben für jede Klasse überschreiben, um besser zu verstehen, wann die Retain-Anzahl höher als erwartet ist.

Etwas wie folgt aus:

- (id) retain 
{ 
    NSLog(@"Retain: Retain count is now %d", self.retainCount+1); 
    return [super retain]; 
} 

- (void) release 
{ 
    NSLog(@"Release: Retain count is now %d", self.retainCount-1); 
    [super release]; 
} 

Wenn das gesagt ist, ich glaube, Sie haben zu prüfen, ob Ihr „Speicherleck“ ist nicht nur etwas, das System zwischengespeichert hat. Wenn Sie immer wieder mehr Speicher verwenden können, indem Sie immer wieder die gleiche Sequenz ausführen, haben Sie ein Leck.

1

Problem ist jetzt gelöst, es war UIWebView. Es behielt etwas Cache und es gab keine Möglichkeit, es zu löschen. Nach dem Ersetzen von UIWebView mit UIScrollView (es wurde verwendet, um einfache lokale Seite anzuzeigen) Problem ist weg.

Verwandte Themen