Also ja, ich bin ein Java-Typ in dieser verrückten iPhone-Welt. Wenn es um die Speicherverwaltung geht, habe ich keine Ahnung davon, was ich mache.Wie kann ich den UIViewControllers mit einem Navigationscontroller verwalten?
Ich habe eine App, die einen Navigation-Controller verwendet, und wenn es Zeit ist, zur nächsten Ansicht zu gehen auf I-Code, der wie folgt aussieht: auf Speicherverwaltung
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
nun nach Apples Grundregel
Sie nehmen Besitz eines Objekts, wenn Sie es mit einer Methode, deren Name mit „alloc“ oder „neu“ oder enthält „Kopie“ (zum Beispiel
alloc
,newObject
odermutableCopy
) erstellen, oder wenn Sie senden es ist einretain
Nachricht. Sie sind dafür verantwortlich, das Eigentum an Objekten, die Sie besitzen, mitrelease
oderautorelease
abzugeben. Jedes andere Mal, wenn Sie ein Objekt erhalten, dürfen Sie es nicht freigeben.
mir, dass bedeutet, dass ich myController
Freigabe werden soll, oder es eine autorelease
Botschaft. Aber wenn ich das versuche, stürzt meine Anwendung ab, während ich die Ansichten vom Stapel verschiebe.
Das hat nicht richtig zu mir gerochen, aber in laufenden Geräten behauptet es, dass ich keine Speicherlecks habe.
Also ich meine Frage ist
- Bin ich dieses Recht zu tun?
- Bekommt der Navigationscontroller Besitz von MyViewController und erklärt das Fehlen eines Speicherlecks?
- Sollte ich myController einer Instanzvariable in meinem root ViewController zuweisen? In diesem Fall wäre es behalten werden markiert, und ich würde Freisetzung im dealloc Methode der Wurzel
Ich habe nur die Verwendung von Autorelease mit Release kontrastiert. Sie können die Autorelease vor oder nach der Autorisierung durchführen, aber wenn Sie sie freigeben, MÜSSEN Sie dies nachher tun. –