NSCoder
使用NSCoder时Model要遵循NSCoding协议,同时也要实现encodeWithCoder和initWithCoder方法。
NSCoder会将Model中的数据转换为键值对形式的数据并写入指定的文档。通过encodeWithCoder进行归档。initWithCoder进行解档。
按照规定,编码某个属性时要使用的键就是该属性的名称。
XIB文件也是居于固化机制的。
应用沙盒
就是文件系统的目录
应用沙盒所包含的目录:
- 应用程序包(application bundle)
可执行的文件和所有资源文件。
此目录中的文件都是只读的,不能修改。此外也不能在运行时向application bundle中添加文件。application bundle中的文件通常包括:pathForResourec:ofType:方法。
- Documents/
运行时生成的并且需要保留的数据。iTunes或iCloud会在备份该文件。
- Library/Caches/
与Documents目录相同,不同的是他不会被iTunes或iCloud备份该文件。
- Library/Preferences/
存放所有的偏好设置,可理解为相当配置文件,iOS中的设置(setting)应用也会在该目录中查找应用的设置信息。
-tmp/
存放设备运行时的临时数据。
获取文件目录
//第一个参数时NSSearchPathDirectory类型常量,负责指定目录的类型
NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSSearchPathForDirectoriesInDomains返值是一个数组,是因为在Mac OS中可能会有多个值,但是在iOS中只会有一个值。
获取应用程序包目录(Application Bundle)
//获取应用程序包的目录
NSBundle *bd = [NSBundle mainBundle];
//在应用程序包中查找test.jpeg文件的全路径
NSString *path = [bd pathForResource:@"test" ofType:@"jpeg"];
应用状态与状态转换
NSData
//向指定的路径中写入数据
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;