应用数据存储方式


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;
}


你可能感兴趣的:(应用数据存储方式)