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

标签 iphone ios objective-c xcode uiviewcontroller

我有一个导航 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/

相关文章:

ios 驻留菜单管理左右菜单内容

ios - 如何检测iPhone是否连接到任何蓝牙设备?

iphone - iOS 6 发布后继续支持 iOS 4.x 是否值得?

iphone - 如何动态地将 UIImageView 添加到 View 并定位项目?

ios - 视频流演示中的错误

ios - 通过设置某种标志隐藏 imageView 和 Label

ios - CoreData 运行缓慢,因为有很多对象。我该如何优化它?

ios - iOS 中的部落冲突等等待游戏中的计时器、时钟更改用户证明

ios - 生成其他节点后旋转停止

ios - 带有 openssl 加密数据的 NSString initWithBytes 使用 NSUTF8StringEncoding 返回 nil