NSCache和后台运行

15

我注意到NSCache在应用程序进入后台时会驱逐其所有对象。这是预期行为吗?有没有办法避免它?

我希望它在设备内存耗尽时才驱逐对象,而不是应用程序进入后台时立即驱逐。

您知道任何有效的替代方案吗?

3个回答

13

在我的情况下,当存储在NSCache中的对象不符合NSDiscardableContent协议时发生了这种情况。当我添加了该协议后,当应用程序进入后台时对象的驱逐消失了。

此外,根据我在这里发现的NSCache.m来源,即使应用程序需要更多内存并且应该驱逐其中一些元素,也永远不会在运行时删除不符合NSDiscardableContent协议的对象。也许这就是为什么非NSDiscardableContent对象在应用程序进入后台时被驱逐的原因,因为那是它们被驱逐的好时机。


2

NSCache仍然很荒谬。我从SDK的第一天起就是iOS开发人员,直到今天才遇到这个问题,并找到了这篇有用的文章。

多年来,我一直认为它像任何正常的缓存一样工作,但不是!我再也不会使用它了。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接