Nach 3 Stunden oder so, habe ich es endlich geschafft, ein Speicherleck in einem View-Controller zu beheben. Das Leck wurde von einem UIPickerView verursacht, dessen Eigenschaft in der Headerdatei auf "beibehalten" gesetzt ist.Objective-C Speicherverwaltung - ziemlich sicher mache ich das alles falsch
Der folgende Code verwaltet, es zu beheben:
- (void)viewDidLoad {
[super viewDidLoad];
myPicker = [[[UIPickerView alloc] initWithFrame:CGRectZero]autorelease];
}
- (void)dealloc {
[super dealloc];
[myPicker release];
myPicker = nil;
}
Bitte sagen Sie mir nicht, wie schockierend dieser Code ist ... Ich weiß, dass es schlecht ist. Ich habe eine Freigabe, und eine Autorelease. Problem ist, wenn ich einen Teil des Obigen ändere oder entferne, kommt das Gedächtnisleck zurück.
ich aber wusste ich, wie Objective-C-Speicherverwaltung funktioniert, natürlich nicht ...
Warum der obige Code den Speicherverlust zu beheben, und was könnte eine korrekte Version des Codes aussehen?
-
EDIT:
Wenn jemand das gleiche Problem hat, oder interessiert - das Problem war, dass eines der anderen Objekte in meiner Klasse wurde auf ‚behalten‘ und nicht ‚zuweisen ". (Wenn Sie kein Objekt besitzen, sollte die Eigenschaft zugewiesen, nicht beibehalten werden).
Wie Cannondale sagte, behebt das Entfernen der zusätzlichen Behalten alles, und nur eine Version ist notwendig.
Freut mich zu hören, dass Sie es aussortiert haben. Nice one :) – RedBlueThing
das kann helfen: http://interfacelab.com/objective-c-memory-management-for-lazy-people/ – hlfcoding