原创blog,转载请注明出处
blog.csdn.net/hello_hwc
欢迎关注我的iOS SDK详解专栏,这里有很多基础的文章
http://blog.csdn.net/column/details/huangwenchen-ios-sdk.html
前言:总的来说,CoreData的性能是很好的,尤其是对于数据量较小的App,但是CoreData很有可能会被滥用,导致App的性能下降。当数据量较大的时候,开发者也要权衡是直接使用SQLite还是使用CoreData,这个后续我会继续比较。
本文会从几个方面来讲解CoreData的性能。
- 查询数据
- 降低内存使用
- 大量数据的处理
- 如何分析性能问题
查询优化
通常,查询一组数据分为几种情况
- 对象在managed context中,这时代价极小,就是内存操作
- 对象最近被取出过,在持久化存储协调器的缓存中,这样的代价也很小。
- 对象需要从文件中取出,这时候代价就很大了。
从文件中取出的时候,要访问文件,并且和当前Context进行合并。所以,能够同时取出的对象,就不要分几次取出。(同时也要考虑到内存问题)
设置合理的Predicates
- 查询字符串的速度要慢于查询,所以
(salary > 5000000) AND (lastName LIKE 'Quincey')
要好于(lastName LIKE 'Quincey') AND (salary > 5000000)
- 只fetch那些需要的数据。对于少量的数据,只需要使用Fetch Limits就行了,如果要使用大量数据,则通常要两个Fetch,第一个Fetch取出少量数据即刻为UI服务,另一个Fetch取出大量数据。
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[