2015-11-19 24 views
1

我当前使用NSCache的子类来存储一些带有相应名称(键)的图像(值),并且它在应用程序处于前台时似乎工作正常。但是,当我按Home键/用户进入后台并重新进入应用程序时,NSCache为空。NSCache在应用程序进入后台时清空

实现细节:我实现了NSCache的子类作为Singleton。这确保了应该只有该类的一个实例,应该可以在程序的任何地方通过简单地调用类名和共享实现来访问。 [HelloCache sharedCache]。这里的HelloCache是​​子类的名称,sharedCache是​​共享的Cache。

回答

4

认为您需要确保置于缓存中的对象符合NSDiscardableContentProtocol才能获得理想的结果。从NSCache Class Reference:存储在NSCache

一个常见的数据类型的对象是 实现NSDiscardableContent协议的对象。将这种类型的 对象存储在缓存中会有好处,因为它的内容在不再需要时可以丢弃,因此可以节省内存。默认情况下, 缓存中的NSDiscardableContent对象会自动从缓存中删除 (如果其内容已被丢弃),但可以更改此自动的 删除策略。如果一个NSDiscardableContent对象被放入缓存, 被删除后,缓存调用discardContentIfPossible 。

+0

请问您是否可以更具体一些,了解一下如何解决问题? –

+4

NSCache本质上是一个荣耀的NSMutableDictionary,除了它在内存受限的时候释放对象。但是,它需要一些关于什么时候释放的指示。所以它看起来NSDiscardableContent协议来做出这些决定。当对象没有实现时,它会在应用程序处于活动状态时保留该对象,并释放NSCache认为它很方便的对象(每当应用程序进入后台时)。你可以在这里看到:http://stackoverflow.com/questions/13163480/nscache-and-background/13579963#13579963以及 – beyowulf

+0

@beyowulf你的评论在这里比你的回答更有价值! – matt

相关问题