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