三种数据存储方式: plist存储,偏好设置,归档

当一些数据需要保存到手机上方便下次复用,就需要用到系统这三种的存储方法,各有自己的长处,下面让我们了解各种方法

----plist存储

//数据一部都是存取字典和数组,这时我们就可以使用plist文件存储,然后把它放到沙盒当中,
//当然plist在平台是没有的,只有iOS当中才有,他是iOS特有的存储方法

-(void)save{
//第一步:获取沙盒
//这里我们需要用到一个文件搜索方法
//在某个范围内搜索文件夹的路径.
//参数一: directory:获取哪个文件夹
 //参数二:domainMask:在哪个路径下搜索
//参数三:expandTilde:是否展开路径.
NSArray*array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES);
//指定搜索的是Cache目录,所以结果只有一个,取出第一个就是沙盒路径
   NSString*cachePath = array[0];
//拼接文件路径
   NSString*filePathName = [cachePathstringByAppendingPathComponent:@"agePlist.plist"];
//剩下的就是怎么生成一个plist文件,然后放到沙盒里
//其实字典中,已经提供了一种生成plist方法,数组同理
//先生成一个字典
NSDictionary*dict =@{@"age":@18,@"name":@"gaowei"};
//然后直接写入的沙盒路径中[自动转换为plist文件]
[dictwriteToFile:filePathNameatomically:YES];
}

//读取数据

-(void)read{

//继续使用文件搜索的方法,搜索沙盒地址[因为结果可能多个,所以是一个数组]

NSArray *array = NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES)

//Cache目录里只有一个文件,只需取第一个

   NSString*cachePath = array[0];

//拼接地址 [地址为:沙盒路径/保存的plist名称.plist]

   NSString*filePathName = [cachePath stringByAppendingPathComponent:@"agePlist.plist"];

//读取plist文件的


}


================== 我是一个华丽分割线 ==================

---- 归档

//保存数据

-(void)save{

//归档一般都是保存自定义对象的时候,使用归档是因为plist文件不能够保存自定义对象

//如果你想把自定义对象保存在字典中,然后保存到plist也是不会成功生成plist文件

Persion *persion = [[Persion allco] init];

persion.name = @"张三"

persion.age = 18


//获得沙盒临时目录[只有程序被删除,才一同删除,不然一直存在]

NSString*tempPath =NSTemporaryDirectory();

    NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"];
   //archiveRootObject这个方法会自动调用保存对象的encodeWithCoder代理方法[需要在对象中遵守NSCoding方法,并调用该方法],去询问要保存该对象的哪些属性
[NSKeyedArchiver archiveRootObject:persiion toFile:filePath];

}


//读取数据

- (Void)reader {

//获取沙盒临时目录[只有程序被删除,才一同删除,不然一直存在]

NSString *tempPath = NSTemporaryDirectouy();

NSString *filePath = [tempPath stringByAppendingPathComponent:@"persion.data"]'

//NSKeyedUnarchiver会调用initWithCoder方法,来让你告诉他去获取这个对象的哪些属性,所以我们在保存的对象当中实现initWithCoder代理方法.

persion *persion = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

}


//归档最重要的步骤

->Persion.h

#import <Foundation/Foundation.h>
要遵守<NSCoding>协议
@interface Persion : NSObject < NSCoding >

@property(nonatomic,strong)NSString *name;
@property(nonatomic,assign)int age;

@end

->Persion.m

archiveRootObject这个方法底层会去调用保存对象的encodeWithCoder方法,去询问要保存这个对象的哪些属性.
只有遵守了 NSCoding 协议之后才能够实现这个方法 .
-(void)encodeWithCoder:(NSCoder*)encode{

    [encode
encodeObject:self.nameforKey:@"name"];
    [encode
encodeInt32:self.ageforKey:@"age"];
}


NSKeyedUnarchiver会调用initWithCoder这个方法,来让你告诉它去获取这个对象的哪些属性.
initWithCoder 什么时候调用 : 解析一个文件的时候就会调用   [如:persion.data] .
-(instancetype)initWithCoder:(NSCoder*)decoder{    
    if (self= [superinit]) {
       要给它里面的属性进行赋值 , 外界取得对象时访问该属性 , 里面才会用值 .
      self.age= [decoder decodeInt32ForKey:@"age"];
       self.name= [decoder decodeObjectForKey:@"name"];
    }
   
return self;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值