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

标签 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 方法。

两个 View Controller 几乎都是空的,我的意思是没有 NSTimers、 block 或网络请求。 我猜想 AViewController 中存在一个强引用循环,但无法弄清楚循环。

所以,谁能帮我解决这个问题,谢谢!

最佳答案

这是基本的内存管理101。

只有在不再有对该对象的强引用后,该对象才会被释放。

您的 ivar bVC 对 View Controller 有很强的引用。插入它会增加另一个。然后弹出它,它又返回到 bVC 的唯一强引用。所以它不会被释放。

您可以避免使用 ivar 或在某个时候将其设置为 nil,以便可以释放 View Controller 。

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

相关文章:

ios - 使用附加 :YES with operation. outputStream AFHTTPRequestOperation 不起作用

ios - 正确地将 info.plist 条目转换为 NS* 类型

iphone - 在字符串文件中存储键/值对

iphone - 更改 Nib 时不会调用 Dealloc

ios - 不同 View 的不同 UINavigationBar 背景

iOS Objective-C : convert utf-16 to base64

iphone - UIVIew Controller 中何时调用 ViewDidUnload 和 Dealloc 方法?

UIViewController 和 UIview dealloc 没有被调用

ios - iOS CoreBluetooth被动检查蓝牙是否已启用,而不提示用户打开蓝牙

ios - 音频和TTS DUCK问题