在iOS开发中,我们经常性地需要存储一些状态和数据,比如用户对于App的相关设置、需要在本地缓存的数据等等,本篇文章将介绍六个主要的数据存储方式
根据要存储的数据大小、存储数据以及存储类型,存储方式主要分为一下几种:
【iOS】数据持久化(一)之Plist文件、Preference(NSUserDefaults类)
【iOS】数据持久化(二)之归档和解档(iOS 13以后)
【iOS】数据持久化(三)之SQLite3数据库
【iOS】数据持久化(四)之FMDB
Core Data是苹果官方提供的数据持久化解决方案,无需借助第三方框架,但学习门槛较高,编者目前课业较为紧张,以后会深入学习…🙏🏻
在研究存储方式之前,我们有必要先研究一下这些文件会存储到什么地方,这就需要我们了解iOS App特有的沙盒机制
如图为沙盒目录结构,参考(苹果官方文档)
iOS程序默认情况下只能访问自己的目录,这个目录被称为 “沙盒”
沙盒其实就是每一个iOS App特有的一个文件夹,每个iOS App都有自己的应用沙盒(文件系统目录),其结构和目录特性都是一样的
沙盒目录与其他文件系统隔离,应用必须呆在自己的沙盒里,其他应用不能访问该沙盒
简言之,应用只能访问自己应用下的文件
每个App的沙盒都是由下图所示的四部分组成,每一部分中存放的数据和内容都是有一定的规范和性质的:
直接通过NSHomeDirectory()
可以得到该沙盒路径:
NSString* path = NSHomeDirectory();
NSLog(@"%@", path);
沙盒中每个文件夹都有各自的特性,所以在选择存放目录时,一定要选择合适的目录
NSString* path = [[NSBundle mainBundle] bundlePath];
NSLog(@"%@", path);
如果需要借用某个App的图标或贴图,可以在该App中的程序应用包中找到.app
结尾的源文件,然后右键点击显示包内容即可直接获取到其所有的图标和贴图
NSString* path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
//获取Library:NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject
NSString* path = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSLog(@"%@", path);
NSUserDefaults
类来获取和设置应用的偏好NSString* path = NSTemporaryDirectory();
NSLog(@"%@", path);
NSDocumentDirectory
搜索Documents目录、NSCachesDirectory
搜索Library/Caches目录NSUserDomainMask
表示搜索范围限制在当前应用的沙盒目录,还有NSLocalDomainMask
(表示/Library)、NSNetworkDomainMask
(表示/Network)YES
表示路径写成全写形式:/Users/Username/Library/Developer/CoreSimulator/Devices/8D71115A-D081-4440-9C94-13BD102412DB/data/Containers/Data/Application/D53B8C34-A16B-4A3D-9931-001D06F0C51F/Library/Caches
NO
表示路径写成:~/Library/Caches