在应用程序中最好地使用NSCache

时间:2012-12-05 16:45:18

标签: iphone objective-c ios nscache

我想知道是否最好使用一个NSCache的全局实例,或者为每个需要它的组件使用几个实例。

例如,我有几个视图子类,它们将内容绘制到图像中并缓存它们以避免一直重新生成它们。 每个类有一个NSCache实例,或整个应用程序只有一个集中的NSCache,这样会更好吗?

请注意,我并不是指一个对象的每个实例都有一个缓存,这样做是迟钝的。我在谈论每个类的一个NSCache实例。

2 个答案:

答案 0 :(得分:3)

这显然取决于,但我通常会为每种类型的缓存对象投票支持一个缓存。这样,您可以为每个值设置不同的countLimit值,例如指定诸如“保留最近渲染的50个缩略图”,“保留最近下载的5个大图像”,“保留最近下载的10个PDF”等内容。

对于计算量很大的任务,我还采用了两层缓存,NSCache以获得最佳性能,并保存到本地文件系统中的临时/缓存目录,以避免代价高昂的下载周期,同时不占用RAM。

答案 1 :(得分:2)

如果可以跨组件共享缓存项目,那么您可能还有一个统一缓存 - 查找的成本不会高得多,而且您至少有可能减少缓存对象的冗余副本。

但是如果缓存的项目对于每个组件是唯一的,那么将它们混合在缓存中是没有意义的,从代码可读性的角度来看可能会令人困惑。在这种情况下,请将缓存分开。这也可以让你更精确地控制它们 - 例如你可以从没有立即使用的组件中更积极地驱逐缓存。