我注意到NSCache在应用程序进入后台时会驱逐其所有对象。这是预期行为吗?有没有办法避免它?
我希望它在设备内存耗尽时才驱逐对象,而不是应用程序进入后台时立即驱逐。
您知道任何有效的替代方案吗?
在我的情况下,当存储在NSCache中的对象不符合NSDiscardableContent协议时发生了这种情况。当我添加了该协议后,当应用程序进入后台时对象的驱逐消失了。
此外,根据我在这里发现的NSCache.m来源,即使应用程序需要更多内存并且应该驱逐其中一些元素,也永远不会在运行时删除不符合NSDiscardableContent协议的对象。也许这就是为什么非NSDiscardableContent对象在应用程序进入后台时被驱逐的原因,因为那是它们被驱逐的好时机。
NSCache仍然很荒谬。我从SDK的第一天起就是iOS开发人员,直到今天才遇到这个问题,并找到了这篇有用的文章。
多年来,我一直认为它像任何正常的缓存一样工作,但不是!我再也不会使用它了。