我想知道是否最好使用一个全局 NSCache 实例,或者为每个需要它的组件使用多个实例。
例如,我有几个视图子类,它们将内容绘制到图像中并缓存它们以避免一直重新生成它们。每个类有一个 NSCache 实例,还是整个应用程序只有 1 个集中式 NSCache 更好?
请注意,我并不是说每个对象实例一个缓存,这样做是迟缓的。我说的是每个类的一个 NSCache 实例。
我想知道是否最好使用一个全局 NSCache 实例,或者为每个需要它的组件使用多个实例。
例如,我有几个视图子类,它们将内容绘制到图像中并缓存它们以避免一直重新生成它们。每个类有一个 NSCache 实例,还是整个应用程序只有 1 个集中式 NSCache 更好?
请注意,我并不是说每个对象实例一个缓存,这样做是迟缓的。我说的是每个类的一个 NSCache 实例。
这显然取决于,但我通常会为每种类型的缓存对象投票支持一个缓存。这样,您可以countLimit
为每个设置不同的值,例如指定“保留 50 个最近渲染的缩略图”、“保留 5 个最近下载的大图像”、“保留 10 个最近下载的 PDF”等内容。
对于计算量非常大的任务,我还使用了两层缓存,NSCache
以获得最佳性能,并保存到本地文件系统中的临时/缓存目录,以避免昂贵的下载周期,同时不消耗 RAM。
如果缓存的项目可以跨组件共享,那么您不妨拥有一个统一的缓存 - 查找成本不会显着增加,并且您至少有机会减少缓存对象的冗余副本。
但是,如果每个组件的缓存项都是唯一的,那么将它们混合在缓存中是没有意义的,并且从代码可读性的角度来看可能会令人困惑。在这种情况下,将缓存分开。这也让您可以更精确地控制它们——例如,您可以更积极地从未立即使用的组件中驱逐缓存。