我正在使用自動引用計數。 我有一個自定義UIViewController
子類,每當我打電話-presentViewController: animated:completion:
或從上海華盈刪除其觀點,我想NSLog
像「我dealloced」所以我知道視圖控制器已成功刪除。我在視圖控制器中實現了-dealloc
方法。不過,我開始了一個試驗項目中,我只是有兩個UIViewController
情況下(無保留週期),-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(在切換控制器時獲取動畫),仍然可以通過從viewDidAppear方法演示後切換根視圖控制器來釋放初始控制器vc2:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.view.window.rootViewController = self;
}
完美!正是我需要的。感謝您的耐心rdelmar,祝您有美好的一天:)。 – 2013-05-04 22:09:23
要獲得當視圖控制器被釋放就可以實現dealloc方法爲
- (void) dealloc {
NSLog(@"The instance of MyViewController was deallocated");
}
然後當視圖控制器留下的視圖來獲取打印的打印可以實現
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"The instance of MyViewController left the main view")
}
抱歉,我應該在我的問題中包含我已經調用過'-dealloc'。問題是,它根本不叫... – 2013-05-04 09:52:18
如果您使用-presentViewController:animated:completion:
,則每次調用此方法時都保留parentViewController。 ModalViewControllers簡單地被推到另一個ViewController之上。
ModalViewControllers只專爲某種信息/用戶輸入之類的東西的。如果你想釋放ParentViewController,你必須處理你自己的實現。當類被保持(或在這個類的東西被保留),而不是reeleased不叫
感謝您的回答,它很有用。但問題是,我沒有真正調用'-presentViewController:animated:completion:'方法。我只是試圖說明我的情況。實際上,我只是將我自定義的VC視圖添加到另一個未連接到舊VC的超級視圖。 – 2013-05-04 10:09:59
你可以舉一些代碼示例(https://gist.github.com)嗎? – mariusLAN 2013-05-04 10:11:43
當然,你去:https://gist.github.com/anonymous/93242d562263bbf132eb – 2013-05-04 10:14:48
dealloc方法。它適用於既有ARC也沒有它的項目。所以請檢查你的代碼兩次。
這就是爲什麼我創建了測試項目,即避免保留週期... – 2013-05-04 13:12:45
- 1. UITableView的Dealloc不叫
- 2. Dealloc不叫改變標籤
- 3. UIViewController上的Dealloc
- 4. UIViewController和dealloc
- 5. iPhone - dealloc subview UIViewController removeFromSuperview
- 6. 的UITableViewCell dealloc方法
- 7. UIViewControllerTransitioningDelegate方法不叫
- 8. 方法不叫
- 9. UIViewController的loadView不叫
- 10. UIViewController不調用dealloc或調用兩次
- 11. 初始化後的UIViewController dealloc
- 12. 重新加載UIViewController和Dealloc
- 13. 未在UIViewController中調用dealloc方法的問題
- 14. SubView willAnimateRotation方法不叫
- 15. viewDidAppear和viewWillAppear方法不叫
- 16. 委託方法不叫(transitioningDelegate)
- 17. Monotouch:OpenFlowSharp,ViewDidLoad方法不叫
- 18. UISplitViewController委託方法不叫
- 19. Deinitializer不叫在UIViewController中UIPageViewController
- 20. UITabBarControllerDelegate的方法不叫
- 21. UIImage dealloc從來沒有叫
- 22. 委託方法不叫
- 23. UiTableView didSelectRowAt方法不叫
- 24. 委託方法不叫
- 25. UISearchDisplayController委託方法不叫
- 26. popoverControllerDidDismissPopover方法不叫
- 27. xText:doGenerate方法不叫
- 28. NSXMLParserDelegate方法不叫
- 29. @PreDestroy方法不叫
- 30. onPostExecute方法不叫
@ThilinaHewagama'-viewDidDisappear:'確實有效,但是這個方法是否表示釋放? – 2013-05-04 09:47:07
我從來沒有NSZombieEnabled上,我認爲這個問題已在iOS6中解決。 – 2013-05-04 09:57:36
從你在Github上發佈的內容來看,你並不十分清楚你想要做什麼。從窗口中刪除控制器的視圖不會取消分配控制器。你應該在這裏發佈一個你正在做的事情的例子 - 顯示你認爲應該被釋放的控制器的整個代碼。它有助於在上下文中看到它。 – rdelmar 2013-05-04 16:09:04