沙盒
iOS中的沙盒机制是一种安全体系。
每个iOS程序都有一个独立的文件系统(存储空间),而且只能在对应的文件系统中进行操作,此区域被称为沙盒。
应用必须待在自己的沙盒里,其他应用不能访问该沙盒。
所有的非代码文件都要保存在此,例如属性文件plist、文本文件、图像、图标、媒体资源等。
沙盒是用来存入缓冲区的,APP关掉,缓存被自动清理。
沙盒目录结构
(1)/AppName.app
应用程序的程序包目录,包含应用程序的本身。
由于应用程序必须经过签名,所以不能在运行时对这个目录中的内容进行修改,否则会导致应用程序无法启动。
(2)/Documents/
保存应用程序的重要数据文件和用户数据文件等。
用户数据基本上都放在这个位置(例如从网上下载的图片或音乐文件),该文件夹在应用程序更新时会自动备份,在连接iTunes时也可以自动同步备份其中的数据
(3)/Library
/Library目录:这个目录下有两个子目录:
可创建子文件夹。可以用来放置您希望被备份但不希望被用户看到的数据。该路径下的文件夹,除Caches以外,都会被iTunes备份
/Library/Caches(缓存)
保存应用程序使用时产生的支持文件和缓存文件(保存应用程序再次启动过程中需要的信息),还有日志文件最好也放在这个目录。iTunes 同步时不会备份该目录并且可能被其他工具清理掉其中的数据。
/Library/Preferences (偏好)
保存应用程序的偏好设置文件(使用 NSUserDefaults( 这个就是放这) 类设置时创建,不应该手动创建;连iTunes可备份,在应用程序更新时会自动备份;plist文件就放在此处)。
(4)/tmp/
保存应用运行时所需要的临时数据,该路径下的文件不会被iTunes备份。iphone 重启时,会自动清除该目录下所有文件;例如录制视频完成后是放在/temp/;所以应该将视频文件从该文件夹转移到相册中,否则视频文件就会被系统清理掉
API
获取某个路径下的bundle(项目中有新建的bundle)
NSString *strResourcesBundle = [[NSBundle mainBundle] pathForResource:@"Resources" ofType:@"bundle"];
NSBundle *aBundle = [NSBundle bundleWithPath:strResourcesBundle];
NSBundle *bBundle = [[NSBundle alloc] initWithPath:strResourcesBundle];
根据一个特殊的class或者标记 获取NSBundle
+ (NSBundle *)bundleForClass:(Class)aClass;
+ (nullable NSBundle *)bundleWithIdentifier:(NSString *)identifier;
加载资源,如果有错误的话,会放置错误信息
- (BOOL)preflightAndReturnError:(NSError **)error
- (BOOL)loadAndReturnError:(NSError **)error
获取bundle 辅助的path
- (NSString *)pathForAuxiliaryExecutable:(NSString *)executableName;
推荐阅读:
http://www.cocoachina.com/bbs/read.php?tid-319712.html