文章目录
一.沙盒介绍
ios中的沙盒机制是一种安全机制。每个iOS程序都有一个独立的文件系统,只能在对应的文件系统中操作,此区域被称为沙盒。
二.沙盒目录结构和代码示例
1.沙盒根目录
NSString *homeDir=NSHomeDirectory();
NSLog(@“沙盒根目录:%@”,homeDir);
2.Documents
Documents,用户数据文件(如从网上下载的图片视频等),程序更新,连接iTunes自动备份
NSString *docDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, NO) lastObject];
NSLog(@“Documents目录:%@”,docDir);
3.Library
Library,包含caches和preferences,可新建子文件夹,除cache外都可以被iTunes备份,希望备份但不想被用户看到的数据
NSString *libDir=[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject];
NSLog(@“Library目录:%@”,libDir);
3.1 Library/preferences
preferences,偏好设置,NSUserDefaults类创建的数据,plist文件,会被iTunes备份。
3.2 Library/caches
caches,使用时产生的支持文件缓存文件日志文件,不会备份,可能会被清理。
NSString *cachesDir=[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, NO) firstObject];
NSLog(@“caches目录:%@”,cachesDir);
4.tmp
tmp,程序运行时产生的临时文件,重启会被清空,不会被itunes备份。
NSString*tmpDir=NSTemporaryDirectory();
NSLog(@“tmp目录:%@”,tmpDir);
5.AppName.app
NSBundle,程序包目录,程序需要的资源(图像,声音,编译好的代码,nib文件),不能在运行时修改程序包目录,否则无法启动。
NSString *bundle=[[NSBundle mainBundle] bundlePath];
NSLog(@“程序包目录:%@”,bundle);
NSBundle获取程序资源的路径:
NSString *mp4path=[[NSBundle mainBundle] pathForResource:@“shipin” ofType:@“mp4”];
NSLog(@“取:%@”,mp4path);
NSBundle加载nib文件
cell=[[[NSBundle mainBundle]loadNibNamed:cellId owner:self options:nil] lastObject];
三.函数说明
[NSSearchPathForDirectoriesInDomains(“想要查找的目录”,“想从哪个路径区域保护区查找”,“YES/NO”) firstObject];
1.想要查找的目录
NSApplicationDirectory =1, // 到applications (Applications)目录下
NSDemoApplicationDirectory, // 到Applications/Demos目录下
NSDeveloperApplicationDirectory, // 到Developer/Applications目录下.
NSAdminApplicationDirectory, // 到Applications/Utilities目录下
NSLibraryDirectory, // 到Library目录下
NSDeveloperDirectory, // 到Developer目录下.
NSUserDirectory, // 到用户的主目录下
NSDocumentationDirectory, // 到documentation (Documentation)的目录下
NSDocumentDirectory, // 到documents (Documents)目录下
NSCoreServiceDirectory, // CoreServices目录的位置 (System/Library/CoreServices)
NSAutosavedInformationDirectory NS_ENUM_AVAILABLE(10_6, 4_0) =11, // 自动保存的文档位置(Documents/Autosaved)
NSDesktopDirectory =12, // 本地用户的桌面
2.想从哪个路径区域保护区查找
typedef NS_OPTIONS(NSUInteger, NSSearchPathDomainMask) {
NSUserDomainMask =1, // 用户的主目录
NSLocalDomainMask =2, // 当前机器的本地目录
NSNetworkDomainMask =4, //在网络中公开可用的位置
NSSystemDomainMask =8, // 被苹果系统提供的,不可更改的位置 (/System)
NSAllDomainsMask = 0x0ffff // 上述所有及未来的位置
}
3.YES:完整路径
NO:路径的沙盒根目录部分用~代替,如~/Library/Caches
4.lastObject,firstObject,数组的两个对象方法,提取数组的第一个和最后一个元素。当数组元素只有一个时,结果一样。
无论是存储对象还是获取沙盒目录数组中文件路径,经常会用到[xx数组 firstObject], [xx数组 lastObject]。