我注意到当应用程序进入后台时,NSCache会清除其所有对象。这是预期的行为吗?有没有办法避免它?
我希望当应用程序进入后台时设备内存不足时,它会驱逐对象。
您知道任何有效的替代方案吗?
答案 0 :(得分:9)
在我的情况下,当NSCache中存储的对象不符合NSDiscardableContent协议时发生这种情况。当我添加所述协议时,当应用程序进入后台时逐出对象消失。
此外,根据NSCache.m的来源,我发现here,不符合NSDiscardableContent协议的对象永远不会在运行时被删除,即使应用程序需要更多内存并且应该驱逐它的一些元素。也许这就是为什么当应用程序进入后台时非NSDiscardableContent对象被驱逐的原因,因为这是他们被驱逐的好时机。
答案 1 :(得分:1)
此相关帖子中的注释表明当应用程序进入后台时,NSCache将被清除。 NSCache is not evicting data
答案 2 :(得分:0)
NSCache仍然很荒谬。从开发SDK的第一天起,我就一直是iOS开发人员,直到今天,我对此还是有所了解,并发现了这篇有用的文章。
这些年来,我一直认为它可以像任何普通的缓存一样工作,但是不!我永远不会再使用它。