我个人从来没有见过didReceiveMemoryWarning打电话给我。是否有一个已知的内存使用阈值,它会被调用?
发布于 2012-10-19 16:38:26
当系统内存不足,你需要清除你的UIViewController时,它会被调用。
您可以在模拟器中模拟内存警告:Hardware > Simulate Memory Warning并查看发生了什么。
如果您支持iOS6的早期版本,请务必注意Apple's documentation中的以下几点
在iOS 6之前,当出现内存不足警告时,如果
UIViewController类知道以后可以重新加载或重新创建视图,则会清除这些视图。如果发生这种情况,它还会调用viewWillUnload和viewDidUnload方法,使您的代码有机会放弃与视图层次结构相关联的任何对象的所有权,包括从nib文件加载的对象、在viewDidLoad方法中创建的对象以及在运行时延迟创建并添加到视图层次结构中的对象。在iOS 6上,视图永远不会被清除,这些方法也永远不会被调用。如果视图控制器需要在内存不足时执行特定任务,它应该重写didReceiveMemoryWarning方法。
关于阈值,我尽量不超过12MB的内存。
发布于 2012-10-19 14:59:04
不是的。当springboard感觉设备上有太多的资源在使用内存时,就会调用它。这取决于其他应用程序在你的手机上使用了多少东西,这迟早会发生。你永远不能可靠地计算或依赖它何时会发生。
另请注意,因为分配等工具中报告的内存不一定与应用程序的内存使用量相关,因此看起来您并没有使用太多内存,但您可能仍然会收到此警告。
发布于 2012-10-19 15:24:50
根据文档,当系统确定可用内存量较低时,将调用此方法。系统本身确定内存不足,当应用程序分配的内存超过应用程序可用的内存量时,此方法将被调用。请参考http://developer.apple.com/library/ios/#documentation/uikit/reference/UIViewController_Class/Reference/Reference.html
https://stackoverflow.com/questions/12968879
复制相似问题