gpt4 book ai didi

iOS 低内存警告和模拟器的 "Simulate memory warning"

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:05:30 30 4
gpt4 key购买 nike

iOS 下的应用程序通过这些机制接收低内存警告:

  • [AppDelegate applicationDidReceiveMemoryWarning:]

  • UIApplicationDidReceiveMemoryWarningNotification

  • [UIViewController didReceiveMemoryWarning]

这些项目之间有什么关系?它们都是在接收到低内存条件时发生的还是它们有细微的差别?它们以什么顺序执行?

在模拟器中有一个“模拟内存警告”的选项。除了在所有 UIViewController 上调用 didReceiveMemoryWarning: 之外,这会做任何事情吗?

我想使用 Xcode 分析器工具来查看这些天围绕缓存 [UIImage imageNamed:] 方法加载的图像发生了什么——它们是否未缓存? -- 但我需要知道如何“正确地”触发内存不足的情况——即使只是通过分配大量内存也是如此。

最佳答案

在回答有关 imageNamedUIImage 缓存的问题时,是的,它似乎确实清除了缓存。在这里,我通过 imageNamed 加载了 225 张图像,然后在执行 20 秒后,我模拟了一个内存警告:

allocations for imageNamed

话虽如此,我认为 imageNamed 缓存是一个生硬的工具,我更喜欢通过 NSCache 做我自己的缓存,所以我可以限制它的图像数量应该通过设置 countLimit 保留在缓存中,目的是完全防止内存警告。顺便说一句,虽然 NSCache 不响应 UIApplicationDidReceiveMemoryWarningNotification,但它会在真正的低内存情况下自动清除自身。但是,它不会响应模拟器中的手动模拟内存警告。

无论如何,这是使用NSCache加载图像的日志,首先没有countLimit,其次countLimit为50,清除每个末尾的缓存:

NSCache without and with countLimit

关于iOS 低内存警告和模拟器的 "Simulate memory warning",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708994/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com