【发布时间】:2013-04-28 16:18:12
【问题描述】:
我正在使用自动引用计数。
我有一个自定义的UIViewController 子类,每当我调用-presentViewController: animated:completion: 或从父视图中删除它的视图时,我想NSLog 类似“我被释放”这样我知道视图控制器已成功删除。我已经在我的视图控制器中实现了-dealloc 方法。但是,我开始了一个测试项目,其中我只有两个 UIViewController 实例(没有保留周期),并且当我以模态方式推送第二个 UIViewController 或删除超级视图或将其从父视图控制器。我错过了什么吗?在我的原始项目(不是测试用例)中,Instruments 向我展示了这些控制器留下了我无法摆脱的内存占用。
【问题讨论】:
-
@ThilinaHewagama
-viewDidDisappear:确实有效,但这种方法是否表明解除分配? -
我从来没有开启过 NSZombieEnabled,我认为这个问题在 iOS6 中已经解决了。
-
从您在 Github 上发布的内容中根本不清楚您要做什么。从窗口中删除控制器的视图不会释放控制器。你应该在这里发布一个你正在做的例子——显示你认为应该被释放的控制器的整个代码。它有助于在上下文中查看它。
-
@rdelmar 我认为删除控制器的视图也会释放控制器......但是是的,我试图真正摆脱整个控制器而不仅仅是视图,以便视图控制器被释放.
-
如何做到这一点很大程度上取决于您的结构。关闭呈现的控制器或从导航堆栈中弹出控制器都应该导致释放。另外,如果你只是切换窗口的根视图控制器,而你的就是你要切换的那个,那也会导致它被释放。
标签: ios objective-c uiviewcontroller automatic-ref-counting dealloc