【发布时间】:2018-12-21 04:40:13
【问题描述】:
我注意到当应用程序进入后台时,NSCache 会驱逐它的所有对象。这是预期的行为吗?有没有办法避免它?
我希望它在设备内存不足时驱逐对象,而不是在应用程序进入后台时立即驱逐对象。
您知道任何有效的替代方案吗?
【问题讨论】:
我注意到当应用程序进入后台时,NSCache 会驱逐它的所有对象。这是预期的行为吗?有没有办法避免它?
我希望它在设备内存不足时驱逐对象,而不是在应用程序进入后台时立即驱逐对象。
您知道任何有效的替代方案吗?
【问题讨论】:
在我的例子中,当存储在 NSCache 中的对象不符合 NSDiscardableContent 协议时,就会发生这种情况。当我添加上述协议时,应用程序进入后台时对对象的驱逐消失了。
此外,基于 NSCache.m 的来源,我发现 here,不符合 NSDiscardableContent 协议的对象在运行时永远不会被删除,即使应用程序需要更多内存并且应该驱逐它的一些元素。也许这就是当应用程序进入后台时非 NSDiscardableContent 对象被驱逐的原因,因为这是驱逐它们的好时机。
【讨论】:
NSCache 仍然很荒谬。从 SDK 的第一天开始,我就一直是一名 iOS 开发人员,直到今天,我才发现这个有用的帖子。
这些年来,我认为它的工作方式与任何普通缓存一样,但不!我再也不会使用它了。
【讨论】:
此相关帖子中的 cmets 表示应用程序进入后台时会清除 NSCache。 NSCache is not evicting data
【讨论】: