我正在尝试调试为什么我的dealloc覆盖没有在我的视图控制器上被调用。
我有一个视图控制器,它是通过故事板设置的。我已经覆盖了所有3种init方法:
-(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];
}当我导航到应用程序中的上述视图时,我会看到“initWithCoder”按预期的方式被调用。这是我看到的唯一被调用的init方法。当我导航到我的视图时,它会被调用一次。
但是,当我远离视图时,控制器dealloc就不会被调用。viewDidDisappear确实会接到电话。在视图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方法。我不知道该从哪里开始找.
发布于 2014-11-04 04:22:19
是否有指向viewController对象的实例变量?如果仍然有指针,即使视图不在屏幕上,它也不会减少保留计数。
不寻常的保留数是正常的。唯一重要的是0。如果为0,则将取消分配。不能保证一个指针意味着保留计数为1。
https://stackoverflow.com/questions/26727246
复制相似问题