1.沙盒

每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离。应用必须待在自己的沙盒里,其他应用不能访问该沙盒。
利用NSSearchPathForDirectoriesInDomains函数获取应用沙盒目录

  • Documents:保存应用运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
  • tmp:保存应用运行时所需的临时数据,使用完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时不会备份该目录
  • Library/Caches:保存应用运行时生成的需要持久化的数据,iTunes同步设备时不会备份该目录。一般存储体积大、不需要备份的非重要数据
  • Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置)应用会在该目录中查找应用的设置信息。iTunes同步设备时会备份该目录

    2.属性列表

    属性列表是一种XML格式的文件,拓展名为plist如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,就可以使用writeToFile:atomically:方法直接将对象写到属性列表文件中将一个NSDictionary对象归档到一个plist属性列表中
  1. // 将数据封装成字典
  2. NSMutableDictionary *dict = [NSMutableDictionary dictionary];
  3. [dict setObject:@"母鸡" forKey:@"name"];
  4. [dict setObject:@"15013141314" forKey:@"phone"];
  5. [dict setObject:@"27" forKey:@"age"];
  6. // 将字典持久化到Documents/stu.plist文件中
  7. [dict writeToFile:path atomically:YES];

读取属性列表,恢复NSDictionary对象

  1. // 读取Documents/stu.plist的内容,实例化NSDictionary
  2. NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:path];
  3. NSLog(@"name:%@", [dict objectForKey:@"name"]);
  4. NSLog(@"phone:%@", [dict objectForKey:@"phone"]);
  5. NSLog(@"age:%@", [dict objectForKey:@"age"]);

3.偏好设置

存入

  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  2. [defaults setObject:@"itcast" forKey:@"username"];
  3. [defaults setFloat:18.0f forKey:@"text_size"];
  4. [defaults setBool:YES forKey:@"auto_login"];
  5. //需要将存储立即生效时调用以下方法
  6. [defaults synchornize];

读取

  1. NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
  2. NSString *username = [defaults stringForKey:@"username"];
  3. float textSize = [defaults floatForKey:@"text_size"];
  4. BOOL autoLogin = [defaults boolForKey:@"auto_login"];

4.归档/解档

如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以NSCoding协议有2个方法:

  1. encodeWithCoder:
  2. 每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量
  3. initWithCoder:
  4. 每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObject:forKey方法解码实例变量

主要用法

  1. @interface Person : NSObject<NSCoding>
  2. @property (nonatomic, copy) NSString *name;
  3. @property (nonatomic, assign) int age;
  4. @property (nonatomic, assign) float height;
  5. @end
  6. @implementation Person
  7. - (void)encodeWithCoder:(NSCoder *)encoder {
  8. [encoder encodeObject:self.name forKey:@"name"];
  9. [encoder encodeInt:self.age forKey:@"age"];
  10. [encoder encodeFloat:self.height forKey:@"height"];
  11. }
  12. - (id)initWithCoder:(NSCoder *)decoder {
  13. self.name = [decoder decodeObjectForKey:@"name"];
  14. self.age = [decoder decodeIntForKey:@"age"];
  15. self.height = [decoder decodeFloatForKey:@"height"];
  16. return self;
  17. }
  18. @end
  19. 归档(编码)
  20. Person *person = [[[Person alloc] init] autorelease];
  21. person.name = @"MJ";
  22. person.age = 27;
  23. person.height = 1.83f;
  24. [NSKeyedArchiver archiveRootObject:person toFile:path];
  25. 恢复(解码)
  26. Person *person = [NSKeyedUnarchiver unarchiveObjectWithFile:path];