一.Plist 文件保存,这种方式数据安全性几乎为零。主要用于保存不用加密的数据,比如全国的省市城市等,数据保存在沙盒,所以沙盒需要了解一下
首先需要了解一下Bundle和沙盒(sandbox)之间的区别:
Bundle:应用程序在手机中的安装路径
sandbox(沙盒):专门来存储当前APP自己的数据的路径
Document:一般在该目录下保存一些比较重要的数据,比如:游戏相关的数据, 当连接iTunes后会自动同步数据
Library(Library/Caches, Library/Preference):
library/Caches:存放缓存文件,iTunes不会备份,因此文件不会因APP退出而删除(一般使用SDWebImage的缓存资源都是保存到这来)
library/Preference:保存应用的所有偏好设置,iOS的Setting(设置)会在该目录查找该应用的设置信息,iTunes会同步数据
temp:临时文件, iTunes不会备份该文件夹中的数据, 这个文件夹中的数据,会因为应用的关闭而删除.
二.NSUserDefaults保存,通过NSUserDefaults类,你可以把用户首选项保存到plist文件中。NSUserDefaults把plist文件存储在沙盒中的library/Preferences目录下,这个plist文件一直存在,直到你删除应用程序。
三.归档保存,归档是cocoa中的另一种对象序列化的技术,归档可以将复杂的对象写入文件,只要归档对象实现NSCopying协议。
-(void)encodeWithCoder://编码
使用: encodeObject:forKey
encodeInt:forKey
如果父类也支持NSCopying协议,则需要在函数的最后一行加上[super encodeWithCoder:encoder]
-(void)initWithCoder://反编码
使用: decodeObjectForKey
decodeIntForykey 解码
如果父类也支持NSCopying协议,需要这样写 if(self = [super initWithCoder:decoder]){...}
四.NSKeyArchiver 和 NSKeyedUnarchiver
NSKeyArchiver 和 NSKeyedUnarchiver 是NSCoder 的子类
常用的函数
[NSKeyArchiver archiveRootObject:dictionary toFile:path];
NSDictionary *dictionary = [NSKeyedUnarchiver unarchiveObjectWithFile:path]
五.Sqlite3
SQlite是关系数据库管理系统,包含在一个轻量级的c语言中,是一个开源项目,支持多数的SQL-92标准,包括事物,即原子性、一致性、隔离性、持久性。
对于数据的打开可以用SQLiter Manager,还有SQLiter Manager for Mac版的
用火狐浏览器的插件
SQLiterManager的截图
SQLiter原生的使用c语言库,编码比较麻烦,我们可以采取第三方库,对c函数进行了封装。PLDatabase,FMDB。
我主要了解的是FMDB:
在使用FMDB中无需考虑ARC和MRC,FMDB会自动适配,在FMDB的源码中发现这段宏
#if ! __has_feature(objc_arc)
#define FMDBAutorelease(__v) ([__v autorelease]);
#define FMDBReturnAutoreleased FMDBAutorelease
#define FMDBRetain(__v) ([__v retain]);
#define FMDBReturnRetained FMDBRetain
#define FMDBRelease(__v) ([__v release]);
#define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));
#else
// -fobjc-arc
#define FMDBAutorelease(__v)
#define FMDBReturnAutoreleased(__v) (__v)
#define FMDBRetain(__v)
#define FMDBReturnRetained(__v) (__v)
#define FMDBRelease(__v)
// If OS_OBJECT_USE_OBJC=1, then the dispatch objects will be treated like ObjC objects
// and will participate in ARC.
// See the section on "Dispatch Queues and Automatic Reference Counting" in "Grand Central Dispatch (GCD) Reference" for details.
#if OS_OBJECT_USE_OBJC
#define FMDBDispatchQueueRelease(__v)
#else
#define FMDBDispatchQueueRelease(__v) (dispatch_release(__v));
#endif
#endif
#if !__has_feature(objc_instancetype)
#define instancetype id
#endif
其中最主要的还是第一行代码,是否有ARC的特点。
FMDB中三个重要的类:
FMDatabase
:是一个提供 SQLite 数据库的类,用于执行 SQL 语句。FMResultSet
:用在FMDatabase
中执行查询的结果的类。FMDatabaseQueue
:在多线程下查询和更新数据库用到的类。
我在学习FMDB时主要参考了github上面一个开源项目
https://github.com/Haley-Wong/JKDBModel
作者封装了对数据库的基本操作,有两个类JKDBHelper和JKDBModel,大家有兴趣可以看看。
六.Core Data
关于Core Data 我在20160811关于CoreData的简单使用 有所介绍。
本文
完。