UIViewController中-dealloc方法不叫(UIViewController -de

2019-09-01 23:04发布

我与自动引用计数工作。 我有一个自定义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