什么时候实际调用didReceiveMemoryWarning

时间:2012-10-19 06:52:32

标签: iphone ios memory ios6 didreceivememorywarning

我以前从未亲眼见过didReceiveMemoryWarning。是否有一个已知的内存使用阈值被调用?

3 个答案:

答案 0 :(得分:7)

当系统内存不足时调用它,然后您需要清除UIViewController

您可以在模拟器中模拟内存警告:Hardware > Simulate Memory Warning并查看会发生什么。

如果您支持iOS6的先前版本,请务必注意Apple's documentation中的以下内容:

  

在iOS 6之前,当发生低内存警告时,   UIViewController类如果知道它可以重新加载或清除它的视图   之后再次重新创建它们。如果发生这种情况,它也会调用   viewWillUnloadviewDidUnload方法可为您的代码提供机会   放弃与您的视图关联的任何对象的所有权   层次结构,包括从nib文件加载的对象,创建的对象   在您的viewDidLoad方法中,以及在运行时懒惰创建的对象   添加到视图层次结构中。在iOS 6上,视图永远不会被清除   永远不会调用这些方法。如果您的视图控制器需要   当内存不足时执行特定任务,它应该覆盖   didReceiveMemoryWarning方法。

关于阈值,我尽量不要超过12MB的内存。

答案 1 :(得分:2)

没有。当跳板感觉设备上有太多使用内存的资源时会调用它。根据其他应用在手机上使用的内容,它可能迟早会发生。你永远无法可靠地计算或依赖它何时会发生。

另外要注意的是,因为分配等工具中报告的内存不一定与应用程序的占用空间相关,所以看起来你的使用量不大,但你可能仍会收到此警告。

答案 2 :(得分:2)

从文档中,当系统确定可用内存量较低时,将调用此方法。系统确定内存不足,当您的应用程序分配超过应用程序可用的内存量时,将调用此方法。请参阅http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html