ios - Dealloc 没有被调用

标签 ios automatic-ref-counting

我正在尝试调试为什么我的 dealloc 覆盖没有在我的一个 View Controller 上被调用。

我有一个通过 Storyboard设置的 View Controller 。我已经重写了所有 3 个初始化方法:

-(id) initWithCoder:(NSCoder *)aDecoder {
    NSLog(@"TestViewController init with coder");

    return [super initWithCoder:aDecoder];
}

-(id) initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    NSLog(@"TestViewController init with nib name");

    return [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
}

- (id) init {
    NSLog(@"TestViewController init");

    return [super init];
}

当我导航到我的应用程序中的上述 View 时,我看到“initWithCoder”按预期被调用。这是我看到的唯一调用的 init 方法。当我导航到我的 View 时它会被调用一次。

然而,当我离开我的 View Controller 时,dealloc 不会被调用。 viewDidDisappear 确实被调用了。在 View didDisappear 中,我记录了引用计数:

-(void) viewDidDisappear:(BOOL)animated {
    NSLog(@"TestViewController Retain count is %ld", CFGetRetainCount((__bridge CFTypeRef) self));
    [super viewDidDisappear:animated];
}

引用计数为 5。

我还在 viewDidLoad 中记录了引用计数,它是 8。

所以它从 5 跳到 8,然后又跳回到 5。

我只看到调用了一次的 init 方法。我什至不知道从哪里开始寻找....

最佳答案

你有一个实例变量指向你的 viewController 对象吗?如果您仍然有一个指针,即使 View 不在屏幕上,它也不会减少保留计数。

不正常的保留计数是正常的。唯一重要的计数是 0。如果它是 0,它将被释放。不能保证一个指针意味着保留计数为 1。

关于ios - Dealloc 没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727246/

相关文章:

ios - ARC 和 Storyboard 的内存问题

objective-c - 递归 block 中的 ARC 行为

ios - 为什么从另一个 View Controller 传递的弱属性会丢失?

ios - Swift 将图像附加到 iMessage

iphone - 有没有办法直接下载 iOS 应用程序(不使用应用程序商店)

objective-c - iOS - ModalViewControllers 的 ARC/内存管理问题

objective-c - 我什么时候应该对 IBOutlets 使用 weak 或 strong 限定符?

iphone - 向全屏电影添加自定义控件

iphone - 在 uitextfield 中显示笑脸图标

ios - Swift 2.0 从外部调用结构函数