推送viewcontroller这是一个实例变量,dealloc方法在弹出时不会被调用

时间:2015-08-28 03:39:42

标签: ios objective-c dealloc

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

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

然后按

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

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

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

所以,任何人都可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:3)

这是基本的内存管理101.

只有在没有对该对象的强引用之后才会释放对象。

你的ivar bVC强烈引用了视图控制器。推动它增加另一个。然后你弹出它,它回到bVC的一个强引用。所以它没有被解除分配。

您可以在某个时候避开ivar或将其设置为nil,以便可以取消分配视图控制器。