NSCache - 标记对象不可删除

时间:2013-01-10 16:09:05

标签: ios objective-c cocoa memory-management nscache

当用户通过菜单在视图控制器之间切换时,如果他有足够的内存,我想要缓存它们。为此,我想使用NSCache来存储许多UIViewControllers

但是,我不确定如何判断NSCache当前使用的对象当前是否已被删除。 例如,当我运行应用程序时,加载几个视图控制器并退出应用程序,NSCache会自动删除所有viewControllers(这是有道理的 - 应用程序将能够在前台停留更长时间)。但是,它还会删除当前显示的视图控制器,这不是我想要的。

如何将特定对象标记为不可移除?

2 个答案:

答案 0 :(得分:2)

你可以这样做:

当应用程序转到后台时,将删除缓存。 因此,当应用程序将后台存储数据从缓存存储到{NSUserDefaults}时,应用程序didBecomeActive将值重新分配给缓存。

答案 1 :(得分:0)

缓存是一种关联内存:您无法强烈决定何时删除缓存项。相反,您可以更改缓存策略。

来自文档:

  

默认情况下,如果丢弃其内容,则会自动从缓存中删除缓存中的NSDiscardableContent对象,但可以更改此自动删除策略。如果将NSDiscardableContent对象放入缓存中,则缓存在删除时会调用discardContentIfPossible。