数据存储的核心都是写文件,主要有四种持久化方式:属性列表(Plist),对象序列化,SQLite数据库,CoreData。

存储Plist:

键值进行存储,不能存储对象。对象需要序列化编码才能写入文件。NSAarry,NSDictionary,NSData,NSString等类型可以直接调用writeToFile方法把数据存储到plist文件中,但是数组中的元素或者字典中的元素必须是下面的七种类型:NSData,NSArray,NSDictionary,NSDate,NSString,NSNumber,Boolean。

NSUserDefault本质上也是存储到plist文件中,所以存入NSUserDefault当中的对象也应该满足以上七种类型。

应用与少量数据存储,比如登陆的用户信息,应用程序配置信息等。

对象序列化:

最终也是存为属性列表文件,如果程序中,需要存储对象属性的时候,直接存储对象比较方便,例如有一个设置类,我们可以把设置类的对象直接存储,就没必要再把里面的每一个属性单独存到文件中,对象序列化是将一个实现了NSCoding协议的对象,通过序列化(NSKeyedArchiver)的形式,将对象中的属性抽取出来,转换成二进制流,也就是NSData,NSData可以选择writeToFile或者存储到NSUserdefault中,必须实现两个方法encodeWithCoder,initWithCoder。对象NSData。

NSObject<NSCoding>=====(NSKeyedArchiver)=====>>NSData=====(writeToFile)=====>>File

||

||

||

||

NSUserDefault

数据库SQLite:

NSOutputStream,NSInputStream

适合大量,重复,有规律的数据存储,而且频繁的读取,删除,过滤数据,这种适合使用数据库。重用的增删改查语句,使用第三方库FMDB更好的处理数据。

CoreData:(以对象方式操作数据库)

      SQLite叫做关系型数据库,CoreData是一种OR-Mapping的思想,O代表对象Object,R代表relationship,Mapping代表映射,直译过来就是对象关系映射,其实就是把对象的属性和表中的字段自动映射,简化程序员的负担,以面向对象的方式操作数据库。ORMapping是一种思想,CoreData实现了这种思想,在Java中,hibernate也是ORMapping的一种实现。

CoreData本质还是数据库,只不过使用起来更加面向对象,不关注二维的表结构,而是只需要关注对象,纯面向对象的数据操作方式。我们直接使用数据库的时候,如果向数据库中插入数据,一般是把一个对象的属性和数据库中某个表的字段一一对应,然后把对象的属性存储到具体的表字段中,取一条数据的时候,把表中的一行数据取出,同样需要再封装到对象的属性中,这样的方式有点繁琐,不面向对象。CoreData解决的问题就是不需要这个中间的转换过程,看起来是直接把对象存储进去,并且取出,不关心表的存在,实际内部已经帮你做好了映射关系。

CoreData中经常使用的类:

NSManagedObjectContext管理对象上下文:相当于FMDB中的FMDatabase对象,我们对数据中的操作先存储到这个上下文中,然后把操作同步到数据库中。

NSManagedObject托管对象:相当于是对表中一行数据的封装。

NSEntityDescription实体描述:相当于在这个对象中定义了数据库中表的结构,比如包含哪些字段等。

NSPersistentStoreCoordinator持久化存储协调器:链接数据库的类,里面包含了数据库的位置,名称等,相当于文件管理器,帮我们创建数据库文件等。

NSMangedObjectModel托管对象模型:里面包含了数据库表,表之间关系的设计模型。其实这个对象里面包含的就是我们使用CoreData时,设计数据库模型Xcdatamodel文件中的信息。

       最后说一下所有的本地持久化数据存储的本质都是写文件,而且只能存到沙盒文件中。沙盒机制是苹果的一项安全机制,本质就是系统给每个应用分配了一个文件夹来存储数据,而且每个应用只能访问分配给自己的那个文件夹,其他应用的文件夹是不能访问的。

       沙盒中默认的三个文件夹(支持自己创建新的文件夹):

              1、Documents:存储用户相关的数据(用户拍的视频,用户创作的图片,用户唱的歌曲,用户收藏的商品等等)。

              2、Library:跟程序相关的数据(程序缓存,程序的配置文件等等)。

              3、Temp:放临时文件,不需要永久存储的,比如下载的时候,需要存储到临时文件中,最终copy到Documents或Library中。

IOS中的数据存储方式,特点,使用情况的更多相关文章

  1. ios中常见数据存储方式以及SQLite常用的语句

    在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults  将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...

  2. iOS中的数据存储方式_SQLite3

    优点: 1) SQLite是一款轻型的嵌入式数据库; 2) 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 3) 它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还 ...

  3. iOS中的数据存储方式_Preference(NSUserDefaults)

    NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...

  4. iOS中的数据存储方式_Plist

    plist文件只能存储OC常用数据类型(NSString.NSDictionary.NSArray.NSData.NSNumber等类型)而不能直接存储自定义模型对象; 我们拿NSData举例: /* ...

  5. iOS中的数据持久化方式

    iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...

  6. 怎样实现IOS开发中的数据存储方式

    iOS 开发中,一般有如下几种数据存储方式.需要根据具体的业务场景,选择 合适的数据存储方式. (1)  用户默认设置 – 这种情况通常不需要用户干预,如游戏通关信息,Video 播放记录,或者 Ap ...

  7. 安卓中的数据存储方式以及ContentProvider的简单介绍

    1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储   2.请介绍下ContentPr ...

  8. iOS中的数据存储

    SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite3常用的4种 ...

  9. iOS开发_数据存储方式

    对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUse ...

随机推荐

  1. Latex居中

    居中文本 环境:\begin{center} 第一行\\第二行\\...第n行 \end{center}.可以用\\[长度]来插入可以省略的额外行间距.在一个环境内部,可以用命令\centering来 ...

  2. UNIX网络编程——epoll 系列函数简介、与select、poll 的区别

    前面博客<<UNIX环境高级编程--epoll函数使用详解>>有关于epoll函数的讲解. 一.epoll 系列函数简介 #include <sys/epoll.h> ...

  3. 简单RPC实现之Netty实现

    所谓RPC就是远程方法调用(Remote  Process Call ),简单的来说就是通过MQ,TCP,HTTP或者自己写的网络协议来传输我要调用对方的什么接口,对方处理之后再把结果返回给我.就这么 ...

  4. Android 推送和统计最优轮循(心跳策略)探究实践

    http://blog.csdn.net/sk719887916/article/details/51398416 skay亲笔 Android开发中经常会用到周期性执行一个动作的需求,大的场景有推送 ...

  5. 【一天一道LeetCode】#191. Number of 1 Bits

    一天一道LeetCode 本系列文章已全部上传至我的github,地址:ZeeCoder's Github 欢迎大家关注我的新浪微博,我的新浪微博 欢迎转载,转载请注明出处 (一)题目 Write a ...

  6. Cytoscape源码下载地址和编译办法

    开发环境:Windows2008 R2 64位+Jdk1.7+Maven3.2.3 前提条件:安装好JDK1.7到C:\Program Files\Java\jdk1.7.0_67,下载好Maven并 ...

  7. Cocos2D将v1.0的tileMap游戏转换到v3.4中一例(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 为了暂时不影响原来的cat移动方法,我们在CatSprite.m ...

  8. JSP标签JSTL的使用(1)--表达式操作

    单纯的使用jsp脚本来进行逻辑处理,显得代码很是杂乱.为了更加简洁也为了便于代码的阅读,于是JSTL应运而生. 库文件下载地址: 我自己上传的一份压缩文件,里面包含了所有需要的jar包,而且不需要积分 ...

  9. matlab中 mcc/mbuild/mex 区别

    mcc 的作用是将 .m文件编译为 c/c++动态链接库文件,使你可以在 c/c++程序中使用 matlab的一些函数功能.mcc 也可以将.m文件编译为exe可执行文件. mex 的作用是将 c/c ...

  10. React Native入门教程 1 -- 开发环境搭建

    有人问我为啥很久不更新博客..我只能说在学校宿舍真的没有学习的环境..基本上在宿舍里面很颓废..不过要毕业找工作了,我要渐渐把这个心态调整过来,就从react-native第一篇博客开始.话说RN也出 ...