【问题标题】:IOS - Modal UIView is loosing delegate after memory warningIOS - 模态 UIView 在内存警告后失去委托
【发布时间】:2012-02-14 17:32:04
【问题描述】:

我几乎完成了我的 iPhone 应用程序,我正在使用 XCode 4 和 IOS 模拟器进行测试。 My App 有一系列视图打开模式:

视图 1 --> 模态 --> 视图 2 --> 模态 --> 视图 3 --> 模态 --> 视图 4

视图 2 是视图 3 的代理,视图 3 是视图 4 的代理。

如果 View4 可见并且我尝试“模拟内存警告”,那么我可以返回 View3,但 View3 无法调用其委托 ([self.delegate NotifySave:self])。

如果我在调用委托之前放置断点,我会看到“0x0”而不是“0xsomething”。 即使我使用“主页”按钮“退出”应用程序,当我再次运行应用程序时(当然)问题仍然存在。

问题是:

  • 其他人是否遇到过同样的问题?
  • 这个问题是否只存在于模拟器中? (我无法在真实 iPhone 上重现警告)
  • 有人有什么建议吗?
  • 我可以阻止 View2 被释放吗? (我认为这是问题的原因)

感谢大家的帮助。

【问题讨论】:

    标签: ios didreceivememorywarning


    【解决方案1】:

    如果您通过 obj-c 2.0 属性存储委托,请尝试将您的模型更改为依赖 retain 而不是 assign。这将确保在这些情况下,代理人不会从你手下被释放。如果您选择这条路线,请务必确保您没有“保留圈”,其中两个对象相互保留并且永远不会被释放。

    @property (nonatomic, retain) id delegate;
    

    对于后台,您应该开发一个系统来存储恢复应用程序状态所需的信息,然后在退出时清除所有这些项目(在- (void)applicationDidEnterBackground:(UIApplication *)application 中)并在重新启动时恢复它们。这将防止您的应用程序经常被“清除”,从而增加您能够在重新启动时恢复的可能性(- (void)applicationWillEnterForeground:(UIApplication *)application),而不是每次从第 1 格重新启动您的应用程序。

    【讨论】:

    • 如果你使用ARC,应该使用strong。
    • 感谢您的建议。实际上问题是由我的“didUnLoad”将指针设置为 nil 引起的。我把它注释掉了,我只是在使用它之后将指针设置为 nil。
    • 我遇到了同样的问题(除了它是一个 UISplitViewController),这救了我。谢谢!
    猜你喜欢
    • 2013-01-20
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-16
    • 2014-12-24
    相关资源
    最近更新 更多