Code Data
  • Core Data 是iOS SDK 里的一个很强大的框架,允许程序员以面向对象的方式储存和管理数据。使用Core Data框架,程序员可以很轻松有效地通过面向对象的接口管理数据
  • Core Data是一种持久化技术,能将模型对象的状态持久化到磁盘,但它最重要的特点是:Core
    Data 不仅是一个加载、保存数据的框架,它还能和内存中的数据很好的共事
        在数据操作过程中,无需编写任何 SQL 语句 Core Data 使用包括实体实体间关系,以及查找符合某些条件实体的请求等内容
       开发者可以在纯对象层上查找与管理这些数据,而不必担心存储和查找的实现细节


     有人说,Code Data性能不好,特别是跟FMDB比较起来!
     笔者亲自测试,插入10000数据,
          FMDB在笔者的模拟器上运行是0.193092682997958秒左右,
       Code Data 运行时间是:
0.171803秒左右
   存储数据的速度甚至比FMDB还要快! 

Core Data Stack 示意图
     Core Data stack 是 Core Data的核心,由一组 Core Data 核心对象组成
  • NSManagedObjectModel 被管理对象模型
  • NSPersistentStoreCoordinator 负责将数据保存到磁盘
  • NSManagedObjectContext 负责管理模型对象的集合




Code Data 的快速体验;
          使用Xcode自带的生成工具体验Code Data

1、新建项目:勾选 Use Core Data
2、创建实体:

  • 打开系统默认创建的 XXX.xcdatamodeld
  • 创建实体 - Entity类似与 SQLite 中的表,不过更像是 OC 中的类
  • 选择 Add Entity,建立如下图所示的实体




3、Create NSManagedObject SubClasses
  • 选择菜单项 Editor - Create NSManagedObject SubClasses,勾选所有看到的选项,两次 Next
  • 调整目录结构,调整完成之后的目录结构示意图如下图所示



4、查看AppDelegate.h的变化

数据操作


#import "Person.h"
#import "AppDelegate.h"
#import "Person+CoreDataProperties.h"
@interface ViewController () @property (nonatomic, readonly) AppDelegate *appDelegate;
@property (nonatomic, readonly) NSManagedObjectContext *moc;
@end @implementation ViewController
- (UIApplication *)appDelegate {
return [UIApplication sharedApplication].delegate;
}
-(NSManagedObjectContext *)moc {
return self.appDelegate.managedObjectContext;
}

插入数据并记录currentPerson 方便后面使用
  • 添加 insertPerson 方法
#pragma 插入一条数据
- (void)insertData {
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.moc];
person.name = @"ysc";
person.age = @100;
person.height = @180; [self.appDelegate saveContext];
self.currentPerson = person;
}


修改数据
  • 在私有扩展中增加属性
  • @property (nonatomic) Person *currentPerson;
     添加 updatePerson 方法,并在 touch 方法中调用

#pragma 更新数据
- (void)upDateData {
self.currentPerson.name = @"CSY";
self.currentPerson.age = @27;
[self.appDelegate saveContext];
}
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self upDateData];
}

删除数据(也在touchesBegan中进行测试)


#pragma 删除
- (void)deleteData {
[self.moc deleteObject:self.currentPerson];
[self.appDelegate saveContext];
}

性能测试:
插入10000条数据测试:(在touchesBegan中进行测试) 
#pragma instertManyPerson
- (void)instertManyPerson{
NSTimeInterval start = CACurrentMediaTime();
for (int i = 0 ; i < 10000; i++) {
Person *person = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:self.moc];
person.name = [@"zhangsan--" stringByAppendingFormat:@"%d",i] ;
person.age = @19;
person.height = @180;
}
[self.appDelegate saveContext];
NSTimeInterval margin = CACurrentMediaTime() - start;
NSLog(@"margin:%f",margin);
}

通过以上代码运行结果可以通过Navicat中查看数据,
可以看出,Code Data对数据的操作纯面向对象方式开发,使用起来还是非常的方便的!

当然,我们还会发现,在AppDelegate.h中多了许多代码,使得AppDelegate看起来非常的乱,在实际的开发中,我们就需要对其进行封装,使得操作变得更加简单明了!

在下一篇中,再来总结一下,Code Data单例的封装!



iOS-Code Data的快速体验的更多相关文章

  1. iOS-Code Data多线程的封装详解

    Code Data 的单例封装:      很容易发现,系统生成的模版代码将Core Data 的基本的准备(貌似还挺复杂!)都放在 AppDelegate中了,可苹果公司为什么会这么做呢?     ...

  2. (译)iOS Code Signing: 解惑

    子龙山人 Learning,Sharing,Improving! (译)iOS Code Signing: 解惑 免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切 ...

  3. Spring Cloud Data Flow初体验,以Local模式运行

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! Spring Cloud Data Flow是什么,虽然已经出现一段时间了,但想必很多人不知道,因为在项目中很少有人用.不仅 ...

  4. 微软发布 Pylance:改善 VS Code 中的 Python 体验

    原标题:微软发布 Pylance:改善 VS Code 中的 Python 体验 来源:开源中国 微软宣布推出一种新的 Python 语言服务器,名为 Pylance,其可利用语言服务器协议与 VS ...

  5. gitbook 入门教程之快速体验

    本文主要介绍三种使用 gitbook 的方式,分别是 gitbook 命令行工具,Gitbook Editor 官方编辑器和 gitbook.com 官网. 总体来说,三种途径适合各自不同的人群,找到 ...

  6. 快速体验 Laravel 自带的注册、登录功能

    快速体验 Laravel 自带的注册.登录功能 注册.登录经常是一件很伤脑筋的是,Laravel 提供了解决方案,可以直接使用它.试过之后,感觉真爽! 前提:本地已安装好了 PHP 运行环境.mysq ...

  7. 分布式_事务_01_2PC框架raincat快速体验1

    一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ...

  8. 分布式事务_01_2PC框架raincat快速体验

    一.前言 关于2PC的理论知识请见:分布式_理论_03_2PC 这一节我们来看下github上一个优秀的2PC分布式事务开源框架的快速体验. 二.源码 源码请见: https://github.com ...

  9. Dev 日志 | 文章《快速体验知识图谱 OwnThink》中的技术问题

    社区小伙伴反馈在实践文章<使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink>时,遇到了一些问题,Nebula Graph 将在本文对该文章中出现的问题进行 ...

随机推荐

  1. CSS3 拯救我的布局吧box-sizing

    一.CSS常见的两栏布局 如上图,是一个很简单的两栏布局,就是一个宽度为960px:并且页面居中显示,侧边栏栏宽度为220px:主内容宽度720px:两者有一个20px的间距,并且有页眉和页脚. 代码 ...

  2. java读取文件内容常见几种方式

    ①随机读取文件内容 ②以行为单位读取文件,常用于读面向行的格式化文件 ③以字符为单位读取文件,常用于读文本,数字等类型的文件 ④以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件 pa ...

  3. vue v-for 渲染input 输入有问题 解决方案

    v-for循环input标签的时候输入信息两个输入框一同显示输入信息 解决方案: <input :placeholder="items.title" v-model = &q ...

  4. Windows 系统如何安装 Docker

    1 docker 是基于 unix 开发的系列工具,所以在 windows 上安装 docker 非常容易出现环境不兼容的问题. 如果 windows 版本是 pro,一般是可以直接安装 docker ...

  5. 全网最详细最好懂 PyTorch CNN案例分析 识别手写数字

    先来看一下这是什么任务.就是给你手写数组的图片,然后识别这是什么数字: dataset 首先先来看PyTorch的dataset类: 我已经在从零学习pytorch 第2课 Dataset类讲解了什么 ...

  6. HTML5新特性 websocket(重点)--多对多聊天室

    一.html5新特性  websocket(重点)--多对多聊天室 HTTP:超文本传输协议 HTTP作用:传输网页中资源(html;css;js;image;video;..) HTTP是浏览器搬运 ...

  7. Django数据库表初始化缓存清除

    新建的django项目中没有应用app01??? models中也没有UserInfo表???? 但在migrate是却一直报错!!!!! 产生此种现象的原因: 之前的项目中肯定是用到过应用app01 ...

  8. jsp获取当前日期

    <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>  <jsp: ...

  9. 针对移动端开发的响应式 Jekyll 主题

    simple 这是针对移动端开发的响应式 Jekyll 主题,效果看 demo,源码在 GitHub,觉得不错点个 star. 主题特性包括但不限于: 在线编辑.新建.发布文章 GitHub 官方语法 ...

  10. 27-1 分组-having

    group by select * from TblStudent --1.请从学生表中查询出每个班的班级id和班级人数 select tsclassId as 班级id, 班级人数=count(*) ...