iOS Core Data的returnsObjectsAsFaults属性

来自论坛的一个问题:[CoreData] returnsObjectsAsFaults是什么用的

这个属性是用来做优化的,但是有时候反而会降低性能,我跟你打个简单的比方,假如你有一个Department对象,它和Employee对象是一对多的关系(比如一个部门有100个员工),当你加载Department的时候,它包含的所有Employee也被加载了,此时如果returnsObjectsAsFaults为YES,则员工们不会被添加到内存中,而是被放在了row cache里,Department对象里的员工们只是一个指针(也称之为fault managed object),只有当你真正要用到Department里的员工数据的时候,Core Data才会再次从row cache中读取出来:

// returnsObjectsAsFaults 为YES
// 打印Department对象
NSLog(@"%@", department);

看到的输出:

<Department 0x123456
  employees : <NSSet data:fault>
>

否则看到的employees输出就是一个完整的列表。

row cache虽然是一张缓存表,但是也有可能因为数据太多而变得很大,如果你要遍历Department的所有员工(或者说你确定你会访问通过NSFetchRequest返回的对象的属性),这种情况下就会有额外的性能开销,此时设置returnsObjectsAsFaults为NO会是更好的选择。

时间: 2024-08-07 08:27:00

iOS Core Data的returnsObjectsAsFaults属性的相关文章

iOS Core data多线程并发访问的问题

大家都知道Core data本身并不是一个并发安全的架构:不过针对多线程访问带来的问题,Apple给出了很多指导:同时很多第三方的开发者也贡献了很多解决方法.不过最近碰到的一个问题很奇怪,觉得有一定的特殊性,与大家分享一下. 这个问题似乎在7.0.1以前的版本上并不存在:不过后来我升级版本到了7.0.4.app的模型很简单,主线程在前台对数据库进行读写,而后台线程不断地做扫描(只读).为此每个线程中各创建了一个NSManagedObjectContext. 这个模型其实有点奇怪,因为普遍的模型是

IOS - CORE DATA的目录(xcode6)

? ?当使用coredata作为app的后台数据存储介质后,我们很想知道数据是否成功插入.为此,我想找到coredata.sqlite的文件 代码中指定的存储目录为: - (NSURL *)applicationDocumentsDirectory { ? ? ? return [[[NSFileManagerdefaultManager] URLsForDirectory:NSDocumentDirectoryinDomains:NSUserDomainMask] lastObject]; }

iOS Core Data 数据迁移 指南

前言 Core Data是iOS上一个效率比较高的数据库框架,(但是Core Data并不是一种数据库,它底层还是利用Sqlite3来存储数据的),它可以把数据当成对象来操作,而且开发者并不需要在乎数据在磁盘上面的存储方式.它会把位于NSManagedObject Context里面的托管对象NSManagedObject类的实例或者某个NSManagedObject子类的实例,通过NSManagedObjectModel托管对象模型,把托管对象保存到持久化存储协调器NSPersistentSt

iOS: Core Data入门

Core Data是ORM框架,很像.NET框架中的EntityFramework.使用的基本步骤是: 在项目属性里引入CoreData.framework (标准库) 在项目中新建DataModel (生成*.xcdatamodeld文件) 在DataModel里创建Entity 为Entity生成头文件(菜单Editor/Create NSMangedObject Subclass...) 在项目唯一的委托类(AppDelegate.h, AppDelegate.m)里添加managedOb

[iOS] Core Data 代码速查表

文中代码均来源于:http://www.appcoda.com/introduction-to-core-data/ 希望学习 Core Data 的同学不要错过:)以下是我个人记录的一些常用代码片段. 有一个 Entity:Device,有三个属性:company.name.version. 1.获取 context 的方法: - (NSManagedObjectContext *)managedObjectContext { NSManagedObjectContext *context =

iOS Core Data: 存储自定义对象 Save Custom NSObject

思路:将NSObject转化为NSData,然后将NSData存入到Core Data中 Core Data实现 添加数据: AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; NSManagedObjectContext *context = [appDelegate managedObjectContext]; NSManagedObject *newContact; newContact = [N

iOS开发过程中使用Core Data应避免的十个错误

原文出处: informit   译文出处:cocoachina Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据.对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了.很多开发者常常在这方面犯一些错误,而这篇文章列出了开发者在iOS开发过程中使用Core Data常见的一些错误,并对如何避免这些错误进行了分析.  1.不了解关键术语 对于iOS开发者来说,会使用Core Data是一项必备技能.

使用Core Data应避免的十个错误

Core Data是苹果针对Mac和iOS平台开发的一个框架,主要用来储存数据.对很多开发者来说,Core Data比较容易入手,但很难精通,如果没有正确的学习方法,你将很难真正理解它,更不用说精通了.很多开发者常常在这方面犯一些错误,而这篇文章列出了开发者在iOS开发过程中使用Core Data常见的一些错误,并对如何避免这些错误进行了分析.   1.不了解关键术语 对于iOS开发者来说,会使用Core Data是一项必备技能. 没有它,很多app都不会存在.当在互联网上四处搜索Core D

ios开发:Core Data概述

Core Data 概述 2005年的四月份,Apple 发布了 OS X 10.4,在这个版本中 Core Data 框架发布了.Core Data本身既不是数据库也不是数据库访问框架.相反,Core Data是一个完整的数据模型解决方案.可以简单理解为对持久层的封装,使得我们可以通过可视化建立数据模型,简化数据存取.即使不懂SQL语句,也依然可以使用Core Data.因为Core Data将底层的数据库SQL语句封装成了一套API,并可通过可视化操作来建立数据库的模型和表之间的关系,它甚至