概论
所谓的持久化,就是将数据保存到硬盘中,使得在应用程序或机器重启后可以继续访问之前保存的数据。在iOS开发中,有很多数据持久化的方案,接下来我将尝试着介绍一下5种方案:
-
plist文件(属性列表)
-
preference(偏好设置)
-
NSKeyedArchiver(归档)
-
SQLite 3
-
CoreData
iOS程序默认情况下只能访问程序自己的目录,这个目录被称为“沙盒”。沙盒的目录结构如下:
应用程序包 NSString *path = [[NSBundle mainBundle] bundlePath];
在沙盒中有几个这样的文件夹:(这些文件都是位于Home路径下的)
(1)Documents: 该文件夹用于程序数据文件写入到该目录下,iTunes同步该应用时会同步此文件夹中的内容,用于存储用户数据以及需要备份的数据。
(2)Library:include Caches and Preferences .
Preferences: iTunes同步,该应用时会同步此文件夹中的内容,用于放置用户的偏好数据,你不能直接创建偏好的设置文件,应该使用NSUserDefaults的类来获取和设置应用程序偏好
Caches:iTunes不同步,用于存放应用程序专用的支持文件,保存应用程序再次启动过程需要的信息。
(3)tmp:Tunes不同步,临时文件夹,下次启动就会将该文件夹中的东西删除。
获取目录的方法:
(1)获取Home目录的方法:
NSString *homeDir = NSHomeDirectory();
(2)获取Documents目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
(3)获取Caches目录路径的方法:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
NSString *cachesDir = [paths objectAtIndex:0];
(4)获取tmp目录路径的方法:
NSString *tmpDir = NSTemporaryDirectory();
(5)获取应用程序程序包中资源文件路径的方法(获取apple.png);
NSString *imagePath = [[NSBundle mainBundle] pathForResource:@"apple" ofType:@"png"];