我注意到,当应用程序进入后台时,NSCache会逐出所有对象。这是预期的行为吗?有没有办法避免它呢?
我预计它会在设备内存耗尽时驱逐对象,而不是在应用程序进入后台时立即驱逐对象。
你知道有什么有效的替代方案吗?
发布于 2012-11-27 16:20:24
在我的例子中,当存储在NSCache中的对象不符合NSDiscardableContent协议时,就会发生这种情况。当我添加上述协议时,当应用程序进入后台时,对象的驱逐将消失。
此外,基于我发现的here的NSCache.m源代码,不符合NSDiscardableContent协议的对象永远不会在运行时被移除,即使应用程序需要更多的内存并应该驱逐它的一些元素。也许这就是为什么当应用程序进入后台时,非NSDiscardableContent对象被驱逐的原因,因为这是一个很好的时机来驱逐它们。
发布于 2012-11-01 01:37:47
这篇相关帖子中的评论表明,当应用程序进入后台时,NSCache会被清除。NSCache is not evicting data
发布于 2018-12-21 04:40:13
NSCache仍然是荒谬的。我从开发工具包的第一天起就是一个iOS开发人员,直到今天我才被这篇文章吸引,发现了这篇有帮助的文章。
这么多年来,我一直认为它的工作原理和任何正常的缓存一样,但事实并非如此!我再也不会用它了。
https://stackoverflow.com/questions/13163480
复制相似问题