didReceiveMemoryWarning 何时真正被调用

问题描述 投票:0回答:4

我以前从未亲眼见过

didReceiveMemoryWarning
打电话过。调用它时是否存在已知的内存使用阈值?

iphone ios memory ios6 didreceivememorywarning
4个回答
11
投票

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

UIViewController

您可以在模拟器中模拟内存警告:

Hardware > Simulate Memory Warning
,看看会发生什么。

如果您支持 iOS6 的早期版本,请务必注意 Apple 文档中的以下内容:

在 iOS 6 之前,当发生低内存警告时, 如果

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

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


3
投票

不。当 springboard 感觉设备上有太多资源使用内存时调用它。根据其他应用程序在您手机上使用的内容的多少,这种情况迟早会发生。您永远无法可靠地计算或依赖它何时会发生。

另请注意,因为分配等工具中报告的内存不一定与应用程序的占用空间相关,因此看起来您没有使用太多内存,但您仍然可能会收到此警告。


2
投票

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


0
投票

在较新的 Xcode/Simulator 版本上,它位于 Simulator 的

Debug
选项卡下,您也可以按
Cmd+Shift+M
,但请确保 Simulator 应用程序处于焦点状态。

© www.soinside.com 2019 - 2024. All rights reserved.