Ich versuche, eine neue Ansicht in einen vorhandenen Ansichtscontroller zu laden, aber ich möchte diese Ansicht aus einer XIB-Datei laden. Mein Plan war, einen zweiten viewController zu erstellen (viewController1 im folgenden Code), dann behalten Sie seine Ansicht bei und geben den von mir erstellten viewController frei. Ich hatte gehofft, dass der ViewController freigegeben würde und die Ansicht bleiben würde, aber das scheint nicht zu passieren.Kann ich eine View behalten und gleichzeitig den ViewController freigeben?
Frage 1: Wenn ein Viewcontroller dealloced wird, wird die zugehörige View dealloced, unabhängig davon, wie die Anzahl der Views ist. In meinem Beispielcode unten können Sie sehen, dass die Ansicht eine Retain-Anzahl von 13 hat, bevor es plötzlich einfach verschwindet.
Frage 2: Warum erhöht das Beibehalten der Ansicht ihren retainCount um 3?
PageViewController *viewController1 = [[PageViewController alloc] initWithNibName:@"Page1" bundle:nil];
[viewController1.view setUserInteractionEnabled:YES];
NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=4
self.currentPageView=viewController1.view;
NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=7
[viewController1.view retain];
NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=10
[self.view addSubview:viewController1.view];
NSLog (@"vc retain count: %d", [viewController1 retainCount]); //count=1
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]); //count=13
[viewController1 release];
NSLog (@"vc view retain count: %d", [viewController1.view retainCount]);
//objc[3237]: FREED(id): message view sent to freed object=0x538ce0
Danke, ich habe immer noch nicht herausgefunden, warum die Retain-Zählung jedes Mal um 3 springt, aber ich denke, das ist chaotisch genug, dass ich nur versuchen werde, Dinge zu refactorieren, um das Problem vollständig zu vermeiden. Ich wünschte, ich hätte genug Reputation, um die Antwort von Hikaru zu bestätigen, auch das war hilfreich. – niels