NSCache – 标记对象不可移动

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

但是,我不知道我怎么可以告诉NSCache目前使用的对象,不应该被删除。 例如,当我运行应用程序,加载很less的视图控制器,并退出应用程序, NSCache自动删除所有viewControllers (这是有道理的 – 应用程序将能够保持在前台较长时间)。 但是,它也删除了当前显示的视图控制器,这不是我想要的。

我怎样才能标记特定的对象不可移动?

你可以这样做:

当应用程序转到后台时,caching将被删除。 所以当应用程序执行后台时,会将caching中的数据存储到{NSUserDefaults},并且应用程序didBecomeActive将值重新分配给caching。

caching是一个关联的内存:你不能强烈决定何时删除caching的项目。 相反,您可以更改caching策略。

从文档:

默认情况下,如果caching中的NSDiscardableContent对象的内容被丢弃,它们将自动从caching中删除,尽pipe可以更改此自动删除策略。 如果一个NSDiscardableContent对象被放入caching中,caching在移除时调用discardContentIfPossible。