IOS - Modal UIView在内存警告后丢失了委托

时间:2012-02-14 17:32:05

标签: ios didreceivememorywarning

我差不多完成了我的iPhone应用程序,我正在使用XCode 4和IOS Simulator进行测试。 我的应用程序有一系列视图打开模式:

  

查看1 - >模态 - >查看2 - >模态 - >查看3 - >模态 - >查看4

View 2是View 3的委托,View 3是View 4的委托。

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

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

问题是:

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

感谢大家的帮助。

1 个答案:

答案 0 :(得分:2)

如果您通过obj-c 2.0属性存储代理,请尝试将模型更改为依赖retain代替assign。这将确保在这些情况下代表不会从您身下释放出来。如果你选择这条路线,重要的是要确保你没有“保留圆圈”,其中两个物体相互保留,永远不会被释放。

@property (nonatomic, retain) id delegate;

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