APP下载

基于iOS9与iOS10的CoreData技术变化

2017-04-13范宝元

中文信息 2017年2期
关键词:性能优化

摘 要: CoreData是一个苹果原生的框架,它拥有像数据库一样存储数据的功能,但本身并不是数据库。本文探究了在iOS9与iOS10中CoreData的性能优化和发生的改变,并对这种变化进行相应的封装,以便兼容iOS9和iOS10。

关键词:iOS9 iOS10 CoreData 性能优化

中图分类号:TP273 文献标识码:A 文章编号:1003-9082(2017)02-0009-01

CoreData是iOS5之后才出现的一个框架,它提供了对象-关系映射(ORM)的功能,即能够将OC对象转化成数据,保存在SQLite数据库文件中,也能够将保存在数据库中的数据还原成OC对象。在此数据操作期间,开发者不需要编写任何SQL语句。在CoreData的技术堆栈主要分为一下几个部分,一个是NSManagedObjectContext管理的模型部分,管理着所有CoreData的托管模型对象;另一个是存储调度器NSPersistentStoreCoordinator,和SQL数据库进行数据交互,负责操纵存储器类NSPersistentStore实现SQLite的本地持久化。这就构成了CoreData的大体结构。在iOS10中,其技术堆栈发生了一些细微变化,详情见下文分析。

一、iOS9中的CoreData

在iOS9中,CoreDataStack是CoreData的核心,由一组CoreData核心对象组成,其技术堆栈图如下所示:

1.NSManagedObjectContext 对象管理上下文: 负责管理模型对象的集合;

2.NSManagedObjectModel 被管理的对象模型: 负责管理对象模型;

3.NSPersistentStoreCoordinator 存储调度器: 负责将数据保存到磁盘的;

其核心部分大致分为两个:一个是对象图管理,另一个是数据持久化;在这两部分的中间,即堆栈中间,是持久化存储协调器(Persistent Store Coordinator, PSC)。通过它将对象图管理部分和持久化部分绑在一起。当这两部分中的一部分需要和另一部分交互,将通过PSC来调节;并且,在iOS9之前,SQLite的文件存储在Documents,在iOS10之后,便把存储地址改为Library/Application/Support中。

二、iOS10中的CoreData

在iOS10中,系統默认生成的是一个CoreData存储容器NSPersistentContainer,NSPersistentContainer是iOS10.0新加的一个类,它的作用是管理CoreDataStack,可以理解为是CoreDataStack的容器,其对数据的增删改查与在iOS9中的过程相同,但是NSPersistentContainer不兼容iOS9,如果在iOS9中使用会闪退,需要进行适配处理,其核心代码如下:

三、NSPersistentContainer性能比较

下图为笔者通过使用iOS9与iOS10的CoreData往数据库中插入十万行数据所耗时间的对比图:

分析上图的对比结果,可以得出,传统的在主线程操作CoreData插入十万行数据,足足等了22s多;然而使用iOS10的NSPersistentContainer的多线程操作数据库插入十万行数据只需要2s多,比传统的CoreData速度快了将近10倍。

结束语

在iOS开发中,目前市场上有三种主流的数据库操作:FMDB、realm、和CoreData,然而CoreData的使用率目前普遍较低。对于一种数据库技术的选择,无非就是使用时是否方便和操作大量数据时,是否耗时耗性能。但是通过上面的对比测试可以看出,在iOS10推出之后,苹果公司对其原生的CoreData在性能上进行了大量优化。

作者简介:范宝元(1993.1-),男,福建,研究方向:智能信息服务系统。

猜你喜欢

性能优化
SQL Server数据库性能优化的几点分析
基于SQL数据库的性能优化的探讨