0

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

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

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

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

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

问题是:

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

感谢大家的帮助。

4

1 回答 1

2

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

@property (nonatomic, retain) id delegate;

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

于 2012-02-14T17:41:42.220 回答