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. DRF版本组件

    1.DRF版本组件配置类局部使用 局部配置: 方式一:直接配置versioning_class=QueryParameterVersioning 方式二:直接配置versioning_class=UR ...

  2. java web基础

    WEB基础 C/S:即服务器-客服机(Client-Server)结构.C/S结构通常采用两层结构,服务器负责数据的管理,客户机负责完成与用户的交互任务.客户通过局域网与服务器相连,接受用户的请求,并 ...

  3. 如何分析和提高(C/C++)程序的编译速度?

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://www.cnblogs.com/lihuidashen/p/129354 ...

  4. 1.scrapy框架

    Scrapy 是一个基于 Twisted 的异步处理框架.异步就是说调用在发出之后,这个调用就直接返回,不管有没有结果.(非阻塞关注的是程序在等待调用结果(消息.返回值)时的状态,指在不能立刻得到结果 ...

  5. 【Java_SSM】(二)使用eclipse创建一个Maven web工程

    这篇博文我们介绍一下如何利用eclipse创件一个maven web工程. (1)File--New--Other--Maven--Maven project 此处我们快速创建一个maven工程 点击 ...

  6. 模板技术:JSP、Thymeleaf之间的比较学习

    JSP Thymeleaf 可以写java代码的html JSP的替代品 执行过程   页面元素   include   跳转   cookie   session   作用域   隐式对象   JS ...

  7. CICD:Jenkins入门和使用

    最近,我们使用的开发服务器被回收了,换了一台新的服务器,CI/CD平台需要重新搭建. 我的运维能力一直薄弱,所以借此机会学习了一番如何使用Jenkins进行持续集成开发和部署,实践并踩了一些坑,在此记 ...

  8. linux DRM/KMS 测试工具 modetest、kmscude、igt-gpu-tools (二)

    kmscube   kmscube is a little demonstration program for how to drive bare metal graphics without a c ...

  9. 【python爬虫】scrapy实战1--百万微博任性采集

    原文: https://blog.csdn.net/qq_36936730/article/details/105132550

  10. 学习ASP.NET Core(08)-过滤搜索与分页排序

    上一篇我们介绍了AOP的基本概览,并使用动态代理的方式添加了服务日志:本章我们将介绍过滤与搜索.分页与排序并添加对应的功能 注:本章内容大多是基于solenovex的使用 ASP.NET Core 3 ...