IOS中的数据存储方式,特点,使用情况
数据存储的核心都是写文件,主要有四种持久化方式:属性列表(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中的数据存储方式,特点,使用情况的更多相关文章
- ios中常见数据存储方式以及SQLite常用的语句
在iOS中,根据不同的需求对应的有多种数据存储方式: 1.NSUserdefaults 将数据存储到沙盒中(library),方便易用,但是只能存储系统提供的数据类型(plist),不能存储自定义的 ...
- iOS中的数据存储方式_SQLite3
优点: 1) SQLite是一款轻型的嵌入式数据库; 2) 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 3) 它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还 ...
- iOS中的数据存储方式_Preference(NSUserDefaults)
NSUserDefaults适合存储轻量级的本地数据,项目中,我会把一些简单的数据密码.网址.登陆状态BOOL.整型/浮点型数据等和用户有关的数据用它存储.但是它不能存储自定义的对象! 实例化一个 N ...
- iOS中的数据存储方式_Plist
plist文件只能存储OC常用数据类型(NSString.NSDictionary.NSArray.NSData.NSNumber等类型)而不能直接存储自定义模型对象; 我们拿NSData举例: /* ...
- iOS中的数据持久化方式
iOS中的数据持久化方式,基本上有以下四种:属性列表.对象归档.SQLite3和Core Data. 1.属性列表 涉及到的主要类:NSUserDefaults,一般 [NSUserDefaults ...
- 怎样实现IOS开发中的数据存储方式
iOS 开发中,一般有如下几种数据存储方式.需要根据具体的业务场景,选择 合适的数据存储方式. (1) 用户默认设置 – 这种情况通常不需要用户干预,如游戏通关信息,Video 播放记录,或者 Ap ...
- 安卓中的数据存储方式以及ContentProvider的简单介绍
1.介绍android的数据存储方式 File存储 sharedPrefrence存储方式 conmtentprovider sqlitedatabase 网络存储 2.请介绍下ContentPr ...
- iOS中的数据存储
SQLite3 SQLite3是一款开源的嵌入式关系型数据库,可移植性好,易使用,内存开销小. SQLite3是无类型的,意味着你可以保存任何类型的数据到任意表的任意字段中. SQLite3常用的4种 ...
- iOS开发_数据存储方式
对于数据持久化的问题,博主并不准备在博文内放很多的代码进行更深一步解释,只是简单的介绍一下四种数据持久化,如有时间,会另外针对各个数据持久化的方法进行更进一步的阐述. 直接进入主题: 〈1.NSUse ...
随机推荐
- 【IOS 开发】基本 UI 控件详解 (UIDatePicker | UIPickerView | UIStepper | UIWebView | UIToolBar )
转载注明出处 : http://blog.csdn.net/shulianghan/article/details/50348982 一. 日期选择器 (UIDatePicker) UIDatePic ...
- 剑指offer面试题3 二维数组中的查找 (java)
注:java主要可以利用字符串的length方法求出长度解决这个问题带来方便 public class FindNum { public static void main(String[] args) ...
- Android View框架总结(四)View布局流程之Measure
View树的measure流程 View的measures时序图 View布局流程之measure measure过程 View的measure过程 ViewGroup的measure过程 Frame ...
- Android之EditText imeOptions属性解析
在我们的手机中,虽然通常输入法软键盘右下角会是回车按键,但我们经常会看到点击不同的编辑框,输入法软键盘右下角会有不同的图标.例如: 点击浏览器网址栏的时候,输入法软键盘右下角会变成"GO& ...
- 【Unity Shader实战】卡通风格的Shader(二)
写在前面 本系列其他文章: 卡通风格的Shader(一) 好久没写博客了,一定是因为课程作业比较多,一定不是因为我懒,恩恩. 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface ...
- 调用MediaScannerConnection 发生内存泄露的解决方法
调用MediaScannerConnection发起扫描时经常会发生内存泄露,例如: E ActivityThread: Activity FolderListActivity has leaked ...
- SpringMVC系列之(一) 入门实例
Spring MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也 ...
- SSH深度历险(五) 深入浅出-----IOC AND AOP
IOC就是Inversion of Control,控制反转.在Java开发中,IoC意味着将你设计好的类交给系统(容器)来控制实现,而不是在你的类内部控制.这称为控制反转. 本人理解:就是把原本你自 ...
- Andriod Studio科普篇——3.关于gradle插件的常见问题
1.andriod gradle插件版本过低. 出错位置: dependencies{ classpath 'com.android.tools.build:gradle:0.10.2' } 提示信息 ...
- Hessian源码分析--HessianProxy
在上一篇博客 Hessian源码分析--HessianProxyFactory 中我们了解到,客户端获得的对象其实是HessianProxy生成的目标对象,当调用目标对象的方法时,会调用Hessian ...