20160816关于ios中的持久化

一.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中三个重要的类:

  1. FMDatabase:是一个提供 SQLite 数据库的类,用于执行 SQL 语句。
  2. FMResultSet:用在 FMDatabase 中执行查询的结果的类。
  3. FMDatabaseQueue:在多线程下查询和更新数据库用到的类。

我在学习FMDB时主要参考了github上面一个开源项目

https://github.com/Haley-Wong/JKDBModel

作者封装了对数据库的基本操作,有两个类JKDBHelper和JKDBModel,大家有兴趣可以看看。

六.Core Data

关于Core Data 我在20160811关于CoreData的简单使用 有所介绍。


本文 

      完。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值