我有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方法一旦所有的风险投资商真正释放。
谢谢,奥贝德
既然你无法预测方法调用的顺序,除非苹果发布他们是一些什么样的保证,或许你可以在单程序通过创建一个方法,如以防御:
- (void)removeDelegate:(UIViewController *)oldDelegate;
如果委托指定的旧的委托相匹配,其设置为零。
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