14

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

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

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

4

3 回答 3

11

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

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

于 2012-11-27T08:20:24.330 回答
2

NSCache 仍然是荒谬的。从 SDK 的第一天开始,我就一直是一名 iOS 开发人员,直到今天我才发现这个有用的帖子。

这些年来,我认为它像任何普通缓存一样工作,但不!我再也不会使用它了。

于 2018-12-20T20:40:13.440 回答
1

此相关帖子中的评论表明,当应用程序进入后台时,会清除 NSCache。 NSCache 不驱逐数据

于 2012-10-31T17:37:46.890 回答