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-10-29 01:12:50

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

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

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

ios-IOS Core Data部分两个Entity之间的RelationShip的存储问题

问题描述 IOS Core Data部分两个Entity之间的RelationShip的存储问题 最近看部分IOS开发视频和书籍时有个问题没想明白: 1.就是在Data Model中创建两个Entity间的Relationship时,这个Relationship会**以某种形式存入数据库**吗? 2.如果存入数据库,那么是否表示当第一次创建Entity间的relationship后,以后每次一个Entity通过relationship获取其他Entity时系统会自动做类似表的连接操作? 3.如果

ios-IOS Core Data 通过条件查询数据库

问题描述 IOS Core Data 通过条件查询数据库 数据库中已经存入数据,在使用的查询条件是request.predicate = NSPredicate(format: "id == %i", student.ID!) 数据库中的id使用的是integer32, student.ID的类型也是这个. 通过这个条件查不到任何记录.同样的我通过查询条件request.predicate = NSPredicate(format: "name == %@" ,st

iOS App开发中Core Data框架基本的数据管理功能小结_IOS

一.何为CoreDataCoreData是一个专门用来管理数据的框架,其在性能与书写方便上都有很大的优势,在数据库管理方面,apple强烈推荐开发者使用CoreData框架,在apple的官方文档中称,使用CoreData框架可以减少开发者50%--70%的代码量,这虽然有些夸张,但由此可见,CoreData的确十分强大. 二.设计数据模型在iOS开发中,时常使用SQL数据库对大量的表结构数据进行处理,但是SQL有一个十分明显的缺陷,对于常规数据模型的表,其处理起来是没问题的,例如一个班级表,其

详解iOS应用开发中Core Data数据存储的使用_IOS

1.如果想创建一个带有coreData的程序,要在项目初始化的时候勾选中  2.创建完成之后,会发现在AppDelegate里多出了几个属性,和2个方法 复制代码 代码如下: <span style="font-size:18px;">    @property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;  @property (readonly, strong, n

《Core Data应用开发实践指南》一2.7 属性的各种设置选项

2.7 属性的各种设置选项 图2-5右侧是Data Model Inspector,开发者可以在这个界面中配置类型之外的其他属性选项.选中某个属性之后,按"Option++3"组合键,即可显示该界面.可供配置的选项根据属性的类型而有所变化.并不是每一种属性都能配置下列选项:Transient 如果在Properties中勾选了这一项,那么该特性就不会写入持久化存储区了."不写入持久化存储区的特性"听上去有些奇怪,但有的时候,只需把特性留在托管对象上下文里面就行了.比

iOS开发笔记 7、数据【Preferences、文件、库、Core Data】

程序开发中根据要使用各种各样的数据,如配制.文件系统.数据库等,iOS对这个有很好的支持 Preferences If you're going to create a program that has built-in preferences, you should do so using the Utility Application template. To create the special cartouched list used by preferences, you must c

Core Data浅谈系列之十 : 关于数据模型中实体的属性

之前写了<Core Data浅谈系列汇总>,今天稍微回顾了下,做些补充. 在这个系列的第一篇<基础结构>中(2013年1月份的文章,时间过得好快啊!),有简单带过Entity的Attribute: 数据类型.布尔值统一用NSNumber来表示: 字符串类型用NSString表示: 时间类型用NSDate表示: 二进制数据类型用NSData表示: 非标准类型用Transformable来表示: 而Attribute还有其自身的Properties,比如Transient表示不用持久化

obj-c编程15[Cocoa实例04]:基于Core Data的多文档程序示例[未完待续]

    上一个例子我们使用的模式数据实际上是基于一个Person数组,现在我们看一下如何使用Cocoa中的Core Data框架支持,几乎不用写一行代码,完成模式数据的建立.     我们这里模式的元素使用的是Car,其属性直接在Xcode中设置: 可以看到Car类型含有6中不同属性.接下来删除窗口中的文本控件,添加Array Controller控件,并将其Managed Object Context与File's Owner的managedObjectContext绑定.如下图: 将控制器的