参考文章:
沙盒(sandbox)(官方文档)
- iOS沙盒主要包含以下三个文件夹:
- 获取沙盒路径
1 | //沙盒根目录 |
注:每次编译代码会生成新的沙盒,注意是编译不是启动,所以模拟器或者真机运行你每次运行所得到的沙盒路径都是不一样,就是上面提到的标识符不一样,正式版app真机的话启动杀死,不会生成新的沙盒
1)、Documents
保存应用程序运行时生成的需要持久化数据,iTunes会自动备份该目录。
苹果公司建议将程序中建立的活在程序浏览到的文件数据保存在该目录下,iTunes备份和恢复的时候会包括此目录。
1 | // 获取Documents目录 |
2)、Library
存储程序的默认设置和其他状态信息,iTunes会自动备份该文件目录
- Library/Caches:存放缓存文件,iTunes不会备份此目录,此目录下文件不会在应用退出时删除,通常存放体积比较大,但并不是很重要的资源
- Library/Preferences:保存应用的所有偏好设置,iOS的Setting(设置)应用会在该目录中查找应用的设置信息,iTunes会自动备份该目录。
——PS:如果你想对偏好设置进行相应的操作,应该使用NSUserDefaults类来取得和设置应用程序的偏好,而不是直接创建偏好设置文件。
- 包含两个文件夹
1 | // 获取Library的目录路径 |
3)、tmp
保存应用程序运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除,应用没有运行时,系统也有可能会清除该目录下的文件,iTunes不会同步该目录,你的iPhone重启时,该目录下的文件会被删除。
数据存储的几种方式
1)、property list(属性列表)
只能存储系统自带的数据类型,一般实际开发中存储字典、数组,自定义的模型无法进行存储。
1 |
|
2)、Preference(偏好设置):NSUserDefaults
只能存储系统自带的数据类型,自定义的对象无法存储。
偏好设置好处:
1.不需要关心文件名(不需要设置路径)
2.键值对存储(账号相关信息) 对象存储
底层实现原理就是封装了一个字典
1 | // Preference(偏好设置) |
3)、文件读写
3.1 简单对象写入文件
1 | //字符串写入文件 |
3.2、NSKeyedArchiver(归档)+ 文件读写
该方式一般都是保存自定义对象的时候使用.因为plist文件不能够保存自定义对象.
如果一个字典当中保存有自定义对象,如果把这个字典写入到文件当中,它是不会生成plist文件的.
- 复杂对象写入文件的过程(复杂对象->归档->NSData->writeToFile)
- 从文件中读取出复杂对象过程(读取文件->NSData->反归档->复杂对象)
- 首先,复杂对象所属的类要遵守
- 其次,实现协议中的两个方法:
- -(void)encodeWithCoder:(NSCoder *)aCoder; //序列化
- -(id)initWithCoder:(NSCoder *)aDecoder; //反序列化
1 | @interface UserModel : NSObject <NSCoding> |
1 | UserModel *userModel = [[UserModel alloc] init]; |
注:归档不是数据持久化手段,而是为文件读写做准备。文件读写才是数据持久化的方式。
Office等文件预览
方法一:UIDocumentInteractionController
1 | //遵循代理方法`<UIDocumentInteractionControllerDelegate>` |
方法二:QLPreviewController
1 | - (void)quickLook { |
方法三:UIWebView
1 | - (void)readDocfile { |