缓存数据的最佳做法是什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了缓存数据的最佳做法是什么?相关的知识,希望对你有一定的参考价值。

在通过Web服务连接到数据源的ios应用中缓存数据的最佳实践是什么?

答案

您应该查看NSCache

http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSCache_Class/Reference/Reference.html

NSCache对象是类似于集合的容器或缓存,用于存储键值对,类似于NSDictionary类。 开发人员通常会合并缓存以临时存储具有创建成本高昂的瞬态数据的对象。 重用这些对象可以提供性能优势,因为不必重新计算它们的值。 但是,对象对应用程序并不重要,如果内存紧张,可以将其丢弃。 如果丢弃,则需要时必须重新计算它们的值。

另一答案

取决于数据类型

对于二进制数据(文件)
-使用NSFileManagerNSData writeToFile:将文件缓存在Cache文件夹中NSData writeToFile:

用于少量数据(ascii / utf8)
-使用NSUserDefaults

用于大量数据(ascii / utf8)
-使用sqlite3数据库

另一答案

这取决于要缓存的数据量以及缓存后如何访问它们,以及一系列其他缓存管理问题。

如果数据量少,则可以将其存储在字典或数组中,然后简单地将其写出并读入。但是,如果有大量数据,这种解决方案可能会变得很慢。 这些读取和写入可能需要很长时间。 而将脏缓存刷新到磁盘意味着写入整个对象。

您可以编写单个文件,但是如果有很多文件也可能会导致性能问题,则可以再次编写。

另一种选择是使用CoreData。 如果您有大量数据(例如,许多对象),则可以定义那些看起来像CoreData实体的外观。 然后,您可以根据需要存储和获取对象,如果数据不是本地的,则可以从Web服务中获取(然后进行缓存)。 您还可以使用CoreData轻松高效地优化其他缓存管理任务(例如,使未使用的条目到期)。

我实际上是走了这条路,有几个不同的应用程序。 我从NSDictionary开始,然后变得很慢。 我改用CoreData,这不仅简化了很多用于缓存初始化和管理的代码,而且在此过程中使应用程序获得了相当大的性能提升。

另一答案

如果您使用的是NSURLConnection或使用NSURLRequest的任何东西,那么缓存已经为您服务:

http://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-169425

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Concepts/CachePolicies.html#//apple_ref/doc/uid/20001843-BAJEAIEE

默认情况下,它们使用协议的缓存策略,对于Web服务,该策略将是它返回的HTTP标头。 IIRC的ASIHttpRequest也是如此。

Core Data还实现了自己的行和对象缓存,效果很好。 因此,这里的现实是您真的不需要担心缓存这些事情-它正在优化您对NSDateFormatter之类的东西的使用,这种东西开始变得很重要(它们创建起来很昂贵,而不是线程安全的,等等。 ..)

如有疑问,请使用Instruments查找瓶颈和延迟

以上是关于缓存数据的最佳做法是什么?的主要内容,如果未能解决你的问题,请参考以下文章

在另一个活动托管的片段之间传递数据的最佳实践

在Android中使用AES加密的最佳做法是什么?

身份验证站点中的Django缓存:最佳做法

空中布局,文字和最佳做法

为 memcached 和 Rails 组合片段和对象缓存的最佳方式

iphone / Objective c的最佳代码片段网站是啥[重复]