[英]UIViewController -dealloc method not called
我正在使用自動參考計數。 我有一個自定義UIViewController
子類,每當我調用-presentViewController: animated:completion:
或從-presentViewController: animated:completion:
刪除它的視圖我想NSLog
東西,比如“我被解除分配”,所以我知道視圖控制器已成功刪除。 我在視圖控制器中實現了-dealloc
方法。 但是我開始了一個測試項目,其中我只有兩個UIViewController
實例(沒有保留周期),並且當我按模式推送第二個UIViewController
或者當我刪除超級視圖或從父視圖控制器中刪除它時,也沒有調用-dealloc
。 我錯過了什么嗎? 在我原來的項目中(不是測試用例),儀器向我展示了那些控制器留下了我無法擺脫的內存占用。
如果要切換視圖控制器,並將要切換的視圖控制器解除分配,則只需切換窗口的根視圖控制器即可。 所以,如果你在VC1中並且想要轉到VC2,那么在VC1中執行此操作:
VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class
self.view.window.rootViewController = vc2;
如果您尚未創建任何屬性以指向vc1,則在進行此切換后將取消分配。
如果要使用模態表示或模態segue(在切換控制器時獲取動畫),仍然可以通過在vc2的viewDidAppear方法的演示之后切換根視圖控制器來取消分配初始控制器:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.view.window.rootViewController = self;
}
要在取消分配View Controller時獲取打印,您可以將dealloc方法實現為
- (void) dealloc {
NSLog(@"The instance of MyViewController was deallocated");
}
然后,當View Controller離開視圖時,您可以實現打印
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"The instance of MyViewController left the main view")
}
如果使用-presentViewController:animated:completion:
每次調用此方法時都會保留parentViewController。 ModalViewControllers簡單地推到另一個ViewController之上。
ModalViewControllers僅適用於某種信息/用戶輸入和類似的東西。 如果要取消分配ParentViewController,則必須處理自己的實現。
當保留類(或保留此類中的某些內容)並且未重新發布時,不會調用dealloc方法。 它適用於同時具有ARC和沒有它的項目。 所以檢查你的代碼兩次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.