当应用进入后台时,NSCache清空

Kev*_* Wu 7 objective-c ios nscache

我目前使用NSCache的子类来存储一些具有相应名称(键)的图像(值),当应用程序处于前台时,它似乎可以正常工作。但是,当我按下主页按钮/用户输入背景并重新输入应用程序时,NSCache为空。

实现细节:我将NSCache的子类实现为Singleton。这样可以确保只存在该类的一个实例,只需调用类名和共享实现即可从程序的任何位置访问该实例。[HelloCache sharedCache]。这里HelloCache是​​子类的名称,sharedCache是​​共享的Cache。

bey*_*ulf 6

认为您需要确保放置在缓存中的对象符合NSDiscardableContentProtocol以获得所需的结果。从NSCache 类参考

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

  • NSCache 本质上是一个美化的 NSMutableDictionary,除了它在内存受限时释放对象。但是,它需要一些关于何时发布以及发布内容的说明。所以它依赖 NSDiscardableContent 协议来做出这些决定。当对象没有实现这一点时,它会在应用程序处于活动状态时保留该对象并释放那些 NSCache 认为方便的对象(每次应用程序进入后台时)。你也可以在这里看到:http://stackoverflow.com/questions/13163480/nscache-and-background/13579963#13579963 (10认同)
  • @beyowulf 您在这里的评论比您的回答提供的信息要丰富得多! (2认同)