如何建设一个专业的网站,天津工程信息网,网站搭建免费视频教程,国际新闻联播在iOS开发中#xff0c;我们经常性地需要存储一些状态和数据#xff0c;比如用户对于App的相关设置、需要在本地缓存的数据等等#xff0c;本篇文章将介绍六个主要的数据存储方式
iOS中数据存储方式#xff08;数据持久化#xff09;
根据要存储的数据大小、存储数据以及…在iOS开发中我们经常性地需要存储一些状态和数据比如用户对于App的相关设置、需要在本地缓存的数据等等本篇文章将介绍六个主要的数据存储方式
iOS中数据存储方式数据持久化
根据要存储的数据大小、存储数据以及存储类型存储方式主要分为一下几种
Plist属性列表不能存放自定义对象Preference偏好设置/NSUserDefaultsNSCodingNSKeyedArchiver/NSKeyedUnarchiver归档/解档SQLite3Core Data面向对象FMDB
【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);沙盒目录特性
沙盒中每个文件夹都有各自的特性所以在选择存放目录时一定要选择合适的目录
应用程序包 除沙盒目录之外每一个App还有一个Bundle目录即 “应用程序包Application”该目录下存放的是应用程序的源文件包括资源文件和可执行文件上架前经过数字签名上架后不可修改。获取Bundle路径的方法是
NSString* path [[NSBundle mainBundle] bundlePath];
NSLog(%, path);如果需要借用某个App的图标或贴图可以在该App中的程序应用包中找到.app结尾的源文件然后右键点击显示包内容即可直接获取到其所有的图标和贴图
Documents 保存应用运行时生成的需要持久化的数据iTunes同步该应用时会同步该文件夹中的内容适合存储重要数据。获取该文件路径的方法是
NSString* path NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
NSLog(%, path);Library/Caches iTunes同步该应用时不会同步该文件夹中的内容适合存储体积大、无需备份的非重要文件。比如网络数据缓存就会存储到cache文件中
//获取LibraryNSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject
NSString* path NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).firstObject;
NSLog(%, path);Library/Preferences: iTunes同步该应用时会同步此文件夹的内容通常保存应用的偏好设置使用NSUserDefaults类来获取和设置应用的偏好tmp iTunes不会同步此文件夹此目录用于存放临时数据使⽤完毕后相应的文件会从该目录删除保存应用程序再次启动过程中不需要的信息
NSString* path NSTemporaryDirectory();
NSLog(%, path);NSSearchPathForDirectoriesInDomains directory 表明我们要搜索的目录名称比如NSDocumentDirectory搜索Documents目录、NSCachesDirectory搜索Library/Caches目录domainMask 指定搜索范围NSUserDomainMask表示搜索范围限制在当前应用的沙盒目录还有NSLocalDomainMask表示/Library、NSNetworkDomainMask表示/NetworkexpandTilde BOOL值表示是否展开波浪线。 比如该值为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