一.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版的

用火狐浏览器的插件

ios存储软件下载不了 苹果手机下载储存_plist

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

  1. :是一个提供 SQLite 数据库的类,用于执行 SQL 语句。

FMResultSet

  1. :用在 

FMDatabaseFMDatabaseQueue

  1. :在多线程下查询和更新数据库用到的类。