2012-02-14 124 views
0

我已经差不多完成了我的iPhone应用程序,我使用的XCode 4和iPhone模拟器进行测试后失去代表。 我的应用有一系列视图中打开模态:IOS - 模态UIView的是内存警告

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

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

如果View4是可见的,我尝试“模拟内存警告”,则我可以返回到View3,但View3是无法呼叫其代表([self.delegate NotifySave:self])。

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

的问题是:

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

感谢大家的帮助。

回答

2

如果您通过obj-c 2.0属性存储委托,请尝试更改模型以依赖retain而不是assign。这将确保在这些情况下,代表不会从您的下方释放出来。如果你走这条路,重要的是要确保你没有一个“保留圈”,两个对象互相保留,永远不会被释放。

@property (nonatomic, retain) id delegate; 

利于让一个后台,你应该制定存储你需要恢复你的应用程序状态的信息,然后清除所有这些项目从内存上的退出(以- (void)applicationDidEnterBackground:(UIApplication *)application)的系统和上重新启动恢复。这将阻止应用程序被“清除”为常,增加了你就可以上重新启动恢复(在- (void)applicationWillEnterForeground:(UIApplication *)application)的可能性,而不是你的应用程序每次从广场1被重新启动。

+0

如果您使用ARC,应该使用强壮的。 – 2012-02-14 17:43:55

+0

感谢您的建议。其实这个问题是由我的“didUnLoad”将指针设置为nil引起的。我评论了它,我只是简单地将指针设置为零后才使用它。 – Daniele 2012-02-15 09:06:58

+0

我有同样的问题(除了它是一个UISplitViewController),并且这救了我。谢谢! – DOOManiac 2012-02-25 04:03:06