iOS数据持久化方案有5种
- 用户偏好设置UserDefaults
- CoreData
- Archiving存档(很少用于持久化,但是stroyborads的持久化方案)
- SQLite(通常也少使用,除非你有遗留的SQL数据库需要访问)
- File System(iOS下面有一个unix文件系统,你可以有限制的进行读写)
Archiving
有一种机制可以让任何对象图持久化,不仅仅是数组,字典,日期等等。
比如在Xcode中建立的图层树,这些很显然是非常复杂的对象。
需要对象图中的所有对象实现下面的协议
func encode(with aCoder:NSCoder)
init(coder:NSCoder)
SQLite
SQL 在单一文件中
快速,低内存,可靠
开源,捆绑在iOS中
并非对适用于所有,比如视频或者一系列的声音,图片。
非基于服务技术,并发性不好,但对于手机来说不是什么大问题
C风格的API,不是面向对象的的风格,
被Core Data 所使用
文件系统
访问Unix文件系统需要四步
- 获取路径的根目录(比如Documents目录,Caches目录)
- 添加路径(添加文件名或者文件名在内的路径)
- 读写文件(通常是Datahove属性列表)
- 使用FileManager管理文件系统(创建目录,遍历目录下的文件,获取文件属性,删除文件等)
iOS系统文件像一个通常的unix文件系统,以/
开头。和通常的unix系统一样,文件是保护的,因此你看不到所有的内容。
为什么只可以在沙盒中执行写入操作
因为:
- 安全性(无人可以破坏你的应用)
- 隐私策略(其他应用无法查看你的应用数据)
- 易清理(删除应用时,应用写入的所有数据都可以被清理掉)
沙盒中有什么
程序包目录 application bundle directory(二进制文件,storyboards文件,图片等)此路径是不可写的。
文档目录Documents directory(通常在这里存储由用户产生的内容)
缓存目录Caches directory (存储一些临时文件,不会被iTunes同步)
其他路径