我有一个AViewController,如果我将BViewController创建为这样的实例变量

@interface AViewController ()
{
    BViewController *bVC;
}
@end

然后推
- (void)push {
    bVC = [[BViewController alloc] init];
    [self.navigationController pushViewController:bVC animated:YES];
}

当BViewController弹出时,不会调用Dealloc方法。

两个视图控制器几乎都为空,我的意思是没有NSTimers,块或网络请求。
我想AViewController中存在一个强大的参考周期,但无法弄清楚该周期。

所以,有人可以帮我吗,谢谢!

最佳答案

这是基本的内存管理101。

仅在不再有对该对象的强引用之后才释放该对象。

您的ivar bVC对视图控制器有很强的引用。推动它会增加另一个。然后弹出它,它又回到了bVC的一个强大参考。因此它不会被释放。

您可以在某个时候避免使用ivar或将其设置为nil,以便可以释放视图控制器。

关于ios - 推送作为实例变量的viewcontroller,弹出时不会调用dealloc方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32262973/

10-12 02:18