poptorootviewcontroller不调用一个序列的dealloc方法和rootview控

2019-10-17 02:41发布

我有4级的VC导航控制器推入它。 我有被设置为VC是在堆栈的顶部的代表属性一个单独的类。 我在每一个VC的dealloc方法这个委托设置为零。 我设置在rootVC的viewdidappear方法的委托。

当我从第四VC,调用的dealloc方法和viewdidappear方法以下(在堆中的所有VC的)的序列弹回到根VC:

"FirstVC dealloc called"
"SecondVC dealloc called"
"viewdidappear of root VC is called"
"ThirdVC dealloc called"

现在,我所面临的问题是,委托被设置为无,即使我在根VC的viewdidappear方法(这是从控制流量也可见),将其设置为自我。 如何避免这种情况呢? 我想获得名为viewdidappear方法一旦所有的风险投资商真正释放。

谢谢,奥贝德

Answer 1:

既然你无法预测方法调用的顺序,除非苹果发布他们是一些什么样的保证,或许你可以在单程序通过创建一个方法,如以防御:

- (void)removeDelegate:(UIViewController *)oldDelegate;

如果委托指定的旧的委托相匹配,其设置为零。



Answer 2:

dealloc一旦对象不再需要时自动调用。 当你弹出ThirdVC ,因为委托属性仍保留它, dealloc不会被调用。 然后,当你rootVC的viewDidAppear被调用,它设置rootVC为代表。 在这个momment,您thirdVC不再需要,这会触发dealloc

有一两件事你可以做的是委托属性设置为不为零的dealloc上,但在viewWillDisappear每个方法ViewController ,因为下一个之前调用此方法一定会被调用ViewController出现。



文章来源: poptorootviewcontroller not calling dealloc methods and viewdidappear method of rootview controller in a sequence