我与自动引用计数工作。 我有一个自定义UIViewController
子类,每当我打电话-presentViewController: animated:completion:
或者从上海华盈删除其观点,我想NSLog
类似“我dealloced”所以我知道视图控制器已成功删除。 我已经实现了-dealloc
在我的视图控制器方法。 不过,我开始了一个试验项目中,我只是有两个UIViewController
情况下(无保留周期), -dealloc
不叫既可以当我推第二UIViewController
模态或当我删除了上海华或当我从父视图控制器将其删除。 我缺少的东西吗? 在我原来的项目(而不是测试用例)仪器显示我的那些控制器留下的内存占用,我无法摆脱掉。
Answer 1:
如果你想切换视图控制器,并有你切换从被释放掉了一个,然后就切换窗口的根视图控制器。 所以,如果你在VC1和想去VC2,然后做这VC1:
VC2 *vc2 = [[VC2 alloc] init]; // or however else is appropriate to get an instance of this class
self.view.window.rootViewController = vc2;
如果您还没有创建任何属性指向VC1,那么它将把这项工作切换后释放。
如果要使用的模态呈现或模态赛格瑞(当切换控制器,以获得动画),仍然可以得到初始控制器通过从VC2的viewDidAppear方法提出后切换根视图控制器被释放:
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
self.view.window.rootViewController = self;
}
Answer 2:
要获得打印时,视图控制器将被释放,你可以实现的dealloc方法
- (void) dealloc {
NSLog(@"The instance of MyViewController was deallocated");
}
然后拿到打印时,视图控制器左边的视图可以实现
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
NSLog(@"The instance of MyViewController left the main view")
}
Answer 3:
如果您使用-presentViewController:animated:completion:
您保留每次parentViewController调用此方法。 ModalViewControllers被简单地推在其他视图控制器的顶部。
ModalViewControllers只专为某种信息/用户输入之类的东西的。 如果你想在的dealloc你ParentViewController必须处理自己的实现。
Answer 4:
当类被保持(或在这个类的东西被保留),而不是reeleased不叫dealloc方法。 它是公正与ARC都没有它的项目。 因此,检查你的代码的两倍。
文章来源: UIViewController -dealloc method not called