gpt4 book ai didi

iphone - poptorootviewcontroller 不按顺序调用 Root View Controller 的 dealloc 方法和 viewdidappear 方法

转载 作者:行者123 更新时间:2023-11-29 11:10:23 26 4
gpt4 key购买 nike

我有一个导航 Controller ,其中插入了 4 个 VC。我有一个单例类,其委托(delegate)属性设置为位于堆栈顶部的 VC。我在每个 VC 的 dealloc 方法中将此委托(delegate)设置为 nil。我在 rootVC 的 viewdidappear 方法中设置委托(delegate)。

当我从第 4 个 VC 弹回根 VC 时,调用 dealloc 方法(堆栈中所有 VC 的)和 viewdidappear 方法的顺序如下:

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

现在,我面临的问题是委托(delegate)被设置为 nil,即使我在根 VC 的 viewdidappear 方法中将它设置为 self(这也可以从控制流中看到)。我怎样才能防止这种情况?我希望在真正释放所有 VC 后调用 viewdidappear 方法。

谢谢,奥拜德

最佳答案

由于您无法预测方法调用的顺序,除非 Apple 发布了它们的某些保证,也许您可​​以通过创建如下方法来对单例进行编程以使其具有防御性:

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

如果委托(delegate)与指定的旧委托(delegate)匹配,则将其设置为零。

关于iphone - poptorootviewcontroller 不按顺序调用 Root View Controller 的 dealloc 方法和 viewdidappear 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11845621/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com