Push viewcontroller 是一个实例变量,pop 时不会调用 dealloc 方法

Push viewcontroller which is an instance variable, dealloc method won't be called when pop it

我有一个 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,以便可以释放视图控制器。