【iOS基础】学习 Core Data 过程记录【待更】

在面试的时候被问到 Core Data 结果答不上来的感觉很不好,于是回到家就开始补习 Core Data!以下是个人总结和代码学习过程!

什么是 Core Data

Core Data是iOS编程中使用持久化数据存储的一种方式。类似数据库存储。需要知道的是,Core Data 并不是数据库本身,是Apple提供的 对象持久化技术(Object Persistent Technology)。

Core Data 框架为数据变更管理、对象存储、对象读取恢复的功能提供了支持。它可以使用SQLite作为持久化存储的类型(但本身并不是一个数据库),它提供了 对象-关系映射(ORM) 的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。

数据最终的存储类型可以是:SQLite数据库,XML,二进制,内存里,或自定义数据类型。

Core Data 的作用/好处/优点

  1. 封装。它能够自动把数据模型封装成对象(数据处理对象化),还对数据库(比如 SQLite)的操作进行了封装。
    意思是,通过它,我们可以轻松地将数据库里面的数据模型转换成OC对象,也可以轻松地将OC对象保存到数据库中,变成表记录,而且不用写一条SQL语句。
    这样做的好处是使代码能够精简很多。

  2. 效率。它能够自动管理内存。

  3. 支持延迟写入。

  4. 支持 undo (撤销)机制。

  5. 支持多线程,但需要thread confinement的方式实现,使用了多线程之后可以最大化的防止阻塞主线程。

Core Data 的弊端/缺点

  1. 和 SQLite 不同的是:只能取出整个实体记录,然后分解,之后才能得到实体的某个属性。
    Core Data因为要兼容多种后端格式,因此查询时,其可用的语句比直接使用 SQLite 少,因此有些fetch(查询操作)实际上是直接 fetch 一个 entity(实体)的所有数据然后在内存中做 filter(过滤)。

  2. 不能设置数据库主键,需要手动操作。

  3. 没有批处理。批量插入、更新和删除数据都需手动写循环。

  4. 不是关系型数据库,处理多对多的关系时比较麻烦。

涉及的相关类

这里写图片描述

(1)NSManagedObjectContext(被管理的数据上下文)

操作实际内容(操作持久层)

作用:插入数据,查询数据,删除数据

(2)NSPersistentStoreCoordinator(持久化存储助理)

相当于数据库的连接器

作用:设置数据存储的名字,位置,存储方式,和存储时机

(3)NSManagedObjectModel(被管理的数据模型)——我理解成表数据

数据库所有表格或数据结构,包含各实体的定义信息

作用:添加实体的属性,建立属性之间的关系

操作方法:视图编辑器,或代码

(4)NSEntityDescription(被管理的数据记录)——我理解成表里面的单行数据

相当于数据库中的表格记录

(5)NSManagedObject(实体结构)——我理解成代码里的模型对象

相当于表格每一行封装成的对象

(6)NSFetchRequest(获取数据的请求)

相当于查询语句

理论讲到这里,下面实践出真知。

Core Data 的使用示例

新建一个 Single View Application,勾选“Use Core Data”,勾选了之后就不需要额外引入 Core Data 库了。

这里写图片描述

注意看目录结构中多了一个后缀为“.xcdatamodeld”的包

这里写图片描述

里面是.xcdatamodel文件,用数据模型编辑器编辑,编译后为.momd或.mom文件。

我们先来创建一个 Person 模型,并为它加上 name 和 age 两个属性。
这里写图片描述

接着我们可以通过便捷方式快速创建 Person 的实体结构(模型对象),通过点击 Editor - > Create NSManagedObject SubClass…然后一直 Next 到 Finish 。
这里写图片描述

然后自动生成了三个类,一个.h,一个.m,一个扩展类别里面装了 name 和 age 属性
这里写图片描述

然后我们打开AppDelegate.h,会发现多了几个属性方法

//  AppDelegate.h
//  TestCoreData
//
//  Created by 阿曌 on 15/7/15.
//  Copyright © 2015年 阿曌. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; //被管理的数据上下文
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; //被管理的数据模型
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; //持久化存储助理

- (void)saveContext; //保存更新
- (NSURL *)applicationDocumentsDirectory; //存档路径

@end

其实这个时候环境什么的都已经自动配好了,我们就不需要再搭建上下文的环境了,十分方便。

我们先来了解下存档路径,自己写打印查看。

查询


Reference:
《 Core Data入门》——MJ
《iphone数据存储之-- Core Data的使用(一)》
《iOS 的CoreData的入门资料》
《iOS 开发如果涉及数据和表的持久化,Core Data 比 SQLite 更好吗?》——知乎网友
《iOS的CoreData用法》

待耕——因为准备写新文章了,所以要先发表出来,不然草稿箱会被清掉。。。这个会耕的!~

/**
 *
 * ━━━━━━神兽出没━━━━━━
 *    ┏┓   ┏┓
 *   ┏┛┻━━━┛┻┓
 *   ┃       ┃
 *   ┃   ━   ┃
 *   ┃ ┳┛ ┗┳ ┃
 *   ┃       ┃
 *   ┃   ┻   ┃
 *   ┃       ┃
 *   ┗━┓   ┏━┛  感觉给自己挖了个坑..
 *     ┃   ┃    
 *     ┃   ┃
 *     ┃   ┗━━━┓
 *     ┃       ┣┓
 *     ┃       ┏┛
 *     ┗┓┓┏━┳┓┏┛
 *      ┃┫┫ ┃┫┫
 *      ┗┻┛ ┗┻┛
 *
 * ━━━━━━神兽保佑,代码无bug━━━━━━
 */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值