1.Bundle路径 : app的安装目录
NSString *bundlePath = [NSBundle mainBundle].bundlePath;
2.沙盒路径: app存储数据的
NSString *document = NSHomeDirectory();
》获取沙盒 documents 路径
[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]
#pragma mark - 2数据的三种存储方式
//1、获取沙盒 documents 路径
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
//2、拼接文件名
path = [path stringByAppendingPathComponent:@"data.zzz"];
#pragma mark- 第一种方式 用于普通文件
//1.writeTofile
[names writeToFile:path atomically:YES];
#pragma mark- 第二种方式 用于用户数据
//2.偏好设置 存储
1.获取偏好设置对象
NSUserDefaults *defaul = [NSUserDefaults standardUserDefaults];
2.存储数据
[defaul setObject:@"小明" forKey:@"name"];
[defaul setInteger:100 forKey:@"money"];
[defaul setBool:NO forKey:@"youmeiyou"];
3.立即同步
[defaul synchronize];
#pragma mark- 第三种方式 用于存储对象
//3.归档
[NSKeyedArchiver archiveRootObject:p toFile:path];
解档
Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
1.遵守 NSCoding 协议
//"归档"只是 存储数据的过程
//这是告诉系统 对象的哪些属性需要存储,该如何存储;若该属性没写不会存储进去
-(void)encodeWithCoder:(NSCoder *)aCoder
{
[aCoder encodeObject:self.name forKey:@"name"];
[aCoder encodeInt:self.girl forKey:@"girl"];
[aCoder encodeBool:self.sure forKey:@"sure"];
}
//"归档"只是 读取数据的过程
//这是告诉系统 取出的哪些数据赋值给对象的哪些属性,若该属性没写不会获取出来
- (instancetype)initWithCoder:(NSCoder *)aDecoder
{
if(self = [super init]){
self.name = [aDecoder decodeObjectForKey:@"name"];
self.girl = [aDecoder decodeIntForKey:@"girl"];
self.sure = [aDecoder decodeBoolForKey:@"sure"];
}
return self;
}