一、沙盒目录

Documents:保存应⽤运行时生成的需要持久化的数据,iTunes同步设备时会备份该目录。例如,游戏应用可将游戏存档保存在该目录
Library/Caches:保存应用运行时⽣成的需要持久化的数据,iTunes同步设备时不会备份该目录。⼀一般存储体积大、不需要备份的非重要数据
Library/Preference:保存应用的所有偏好设置,iOS的Settings(设置) 应⽤会在该⺫录中查找应⽤的设置信息。iTunes同步设备时会备份该目录
tmp:保存应⽤运行时所需的临时数据,使⽤完毕后再将相应的文件从该目录删除。应用没有运行时,系统也可能会清除该目录下的文件。iTunes同步设备时 不会备份该目录
//获取沙盒根目录
NSString *rootfilepath=NSHomeDirectory();
NSLog(@"%@",rootfilepath);
//搜索用户文件下有哪些Document,在ios开发中只有一个元素匹配
NSArray *array =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
//获取Document的路径
NSString *path =array.lastObject;// NSString *path =array.firstObject;
二、plist文件
1. 存入到plist文件中
NSArray *array=@[@"1",@"24"];
//1.获取Document目录路径
NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
//2.拼接文件名
NSString *filepath=[path stringByAppendingString:@"/a.plist"];
//3.写入文件
[array writeToFile:filepath atomically:YES];
2.读取plist文件
//1.获取Document目录路径
NSString *path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
//2.拼接文件名
NSString *filepath=[path stringByAppendingPathComponent:@"a.plist"];
//3.读取plist
NSArray *array=[NSArray arrayWithContentsOfFile:filepath];
三、NSUserDefaults
NSUserDefaults的本质其实就是一个字典型的plist文件。

//1.获取NSUserDefaults单例
NSUserDefaults *userdefault=[NSUserDefaults standardUserDefaults];
//2.写入NSUserDefaults中
[userdefault setInteger:1 forKey:@"A"];
[userdefault setObject:@"10" forKey:@"age"];
[userdefault setBool:YES forKey:@"QQ"];
//ios7后,就不需要synchronize
[userdefault synchronize];
//3.从NSUserDefaults中读取
[userdefault boolForKey:@"A"];
[userdefault objectForKey:@"age"];
[userdefault integerForKey:@"QQ"];
四、归档、解档(存储自定义对象)
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
NSString *filepath=[path stringByAppendingPathComponent:@"person.data"];
d.name=@"dog";
Person *p=[[Person alloc]init];
p.age=@"11";
p.name=@"2";
//归档
[NSKeyedArchiver archiveRootObject:p toFile:filepath];
//解档
Person *p1= [NSKeyedUnarchiver unarchiveObjectWithFile:filepath];
NSLog(@"%@",p1.dog.name);
/*
执行了NSKeyedArchiver,会自动调用保存对象的encoderWithCoder方法,需要在自定义对象里重写实现-(void)encodeWithCoder:(NSCoder *)aCoder方法目的是告诉他保存该对象的哪些属性;否则会崩溃。
执行了NSKeyedUnarchiver,会自动调用保存对象的initWithCoder方法,需要在自定义对象里重写实现- (instancetype)initWithCoder:(NSCoder *)aDecoder方法目的是告诉他保存该对象的哪些属性;否则会崩溃。
*/
}
#import <Foundation/Foundation.h>
@interface Person : NSObject<NSCoding>
@property(nonatomic, strong) NSString *name;
@property(nonatomic, strong) NSString *age;
@end
#import "Person.h"
@implementation Person
//想要写出encoderWithCoder方法,必须遵守<NSCoding>协议
//调用该方法的目的是告诉他保存该对象的哪些属性。
- (void)encodeWithCoder:(NSCoder *)aCoder{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeObject:self.age forKey:@"age"];
}
//initWithCoder告诉他读取该对象的哪些属性
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
if (self=[super init]) {//父类没遵守NSCoding
self.name=[aDecoder decodeObjectForKey:@"name"];
self.dog=[aDecoder decodeObjectForKey:@"dog"];
}
return self;
}
@end
网友评论