iOS下的应用程序通过以下机制收到内存不足警告:
[AppDelegate applicationDidReceiveMemoryWarning:]
UIApplicationDidReceiveMemoryWarningNotification
[UIViewController didReceiveMemoryWarning]
这些物品之间有什么关系?它们都是在收到低内存条件时发生的还是它们有微妙的差异?他们以什么顺序执行?
在模拟器中有一个“模拟内存警告”选项。除了在所有UIViewControllers上调用didReceiveMemoryWarning:
之外,这会做什么吗?
我想使用Xcode探查器工具来查看这些天围绕缓存[UIImage imageNamed:]
方法加载的图像会发生什么 - 它们是否未缓存? - 但我需要知道如何'正确'触发低内存条件 - 即使只是通过分配大量内存。
答案 0 :(得分:3)
在回答有关UIImage
的{{1}}缓存的问题时,是的,它似乎确实清除了缓存。在这里,我通过imageNamed
加载了225张图像,然后,在执行20秒后,我模拟了一个内存警告:
话虽如此,我认为imageNamed
缓存是一种生硬的工具,我更喜欢通过imageNamed
进行自己的缓存,因此我可以限制它应该在缓存中保留多少个图像。设置NSCache
,目的是防止内存警告。顺便说一句,虽然countLimit
不响应NSCache
,但它会在真正的低内存情况下自动清除自身。但是,它不会响应在模拟器中手动模拟内存警告。
无论如何,这里是使用UIApplicationDidReceiveMemoryWarningNotification
加载图片的日志,第一个没有NSCache
,其次是countLimit
为50,在每个结尾处清除缓存:< / p>
答案 1 :(得分:0)
部分答案:
我已经确认在模拟器上(iOS模拟器6.0上的iOS6.1),“模拟内存警告”会导致触发所有三种机制,按此顺序:
[AppDelegate applicationDidReceiveMemoryWarning:
[UIViewController didReceiveMemoryWarning]
UIApplicationDidReceiveMemoryWarningNotification