我正在尝试调试为什么我的 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/