Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 跨应用程序最佳使用NSCache_Iphone_Objective C_Ios_Nscache - Fatal编程技术网

Iphone 跨应用程序最佳使用NSCache

Iphone 跨应用程序最佳使用NSCache,iphone,objective-c,ios,nscache,Iphone,Objective C,Ios,Nscache,我想知道是最好使用一个全局NSCache实例,还是为每个需要它的组件使用几个实例 例如,我有几个视图子类,它们将内容绘制到图像中并缓存它们,以避免一直重新生成它们。 每个类有一个NSCache实例更好,还是整个应用只有一个集中式NSCache更好 请注意,我并不是说一个对象的每个实例都有一个缓存,这是迟钝的。我说的是每个类的一个NSCache实例。如果缓存项可以在组件之间共享,那么您最好有一个统一的缓存—查找不会显著增加成本,并且您至少有机会减少缓存对象的冗余副本 但是,如果每个组件的缓存项都是

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

例如,我有几个视图子类,它们将内容绘制到图像中并缓存它们,以避免一直重新生成它们。 每个类有一个NSCache实例更好,还是整个应用只有一个集中式NSCache更好


请注意,我并不是说一个对象的每个实例都有一个缓存,这是迟钝的。我说的是每个类的一个NSCache实例。

如果缓存项可以在组件之间共享,那么您最好有一个统一的缓存—查找不会显著增加成本,并且您至少有机会减少缓存对象的冗余副本


但是,如果每个组件的缓存项都是唯一的,那么将它们混合在缓存中是毫无意义的,并且从代码可读性的角度来看,可能会令人困惑。在这种情况下,请将缓存分开。这还可以让您更精确地控制它们-例如,您可以更积极地从缓存中移出未立即使用的组件。

这显然要视情况而定,但我通常会为每种类型的缓存对象选择一个缓存。这样,您可以为每一个设置不同的
countLimit
值,例如指定“保留50个最近渲染的缩略图”、“保留5个最近下载的大图像”、“保留10个最近下载的PDF”等


对于计算量非常大的任务,我还采用了两层缓存,
NSCache
以获得最佳性能,并将其保存到本地文件系统中的临时/cache目录中,以避免在不消耗RAM的情况下进行昂贵的下载循环。

这也是我的看法。不过,我很想对这个话题有更多的看法。我喜欢为每个对象设置不同的缓存规则。拥有一个集中的对象来管理缓存也是一个很好的选择。显然,保存到磁盘是一种很好的做法。