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. Antd 表格数据分页展示

    分页组件代码 render(){ const {total,size,currenPage} = this.state // 参数分别为数据总条数.每页数据条数.当前页页码 return ( // 渲 ...

  2. 2020版Adobe全家桶介绍及免费下载安装

    前言 Adobe公司创建于1982年,是世界领先的数字媒体和在线营销解决方案供应商.公司总部位于美国加利福尼亚州圣何塞.Adobe 的 客户包括世界各地的企业.知识工作者.创意人士和设计者.OEM合作 ...

  3. 「雕爷学编程」Arduino动手做(22)——8X8 LED点阵MAX7219屏

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  4. 08 返回动态页面web框架

    08 返回动态页面web框架 动态页面: 网页的内容是动态变化的,不是一直不变的(静态页面:每次显示的内容都是一样) 服务器server端python程序(动态页面版本): import socket ...

  5. golang基础教程——字符串篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第6篇文章,这篇主要和大家聊聊golang当中的字符串的使用. 字符串定义 golang当中的字符串本质是只读的字符 ...

  6. vue 实例化使用模板

    var vm = new Vue({ el:"", data:{ }, methods:{ } })

  7. 如何利用Xpath抓取京东网商品信息

    前几小编分别利用Python正则表达式和BeautifulSoup爬取了京东网商品信息,今天小编利用Xpath来为大家演示一下如何实现京东商品信息的精准匹配~~ HTML文件其实就是由一组尖括号构成的 ...

  8. android小Demo--七彩霓虹灯效果

    七彩霓虹灯效果,基于网上的小Demo进行修改. 在android项目values文件夹下创建文件colors.xml,配置七种颜色: <?xml version="1.0" ...

  9. [转]前人挖坑,后人填坑—如何把那些bug挖掘出来

    当我们放下一个项目转投下一个时,手头的东西就要转交给他人处理,或者..不再有人处理,可代码还在那里,搞不好你就引用了别人的东西,保不准哪天别人的代码里就爆出了个大 bug,当然这里的“别人”也可能是 ...

  10. Parrot os配置源更新

    每次都是忘了怎么配置,去官网查文档,这记一下 一.源文件配置注意 首先要注意Parrot官方软件库的默认更新源文件不在 /etc/apt/sources.list 而是 /etc/apt/source ...