ios中的数据存储

1 篇文章 0 订阅
1 篇文章 0 订阅

ios开发中数据的存储方式有

* plist存储

*偏好设置

*归档

*SQLite数据库

*core Data

 1>  plist存储

(1) 存储数据

 // plist其实就是存储字典或者数组对象

    

    NSArray *arr  = @[@1,@3,@"123"];

    

    // 获取应用沙盒

//    NSString *homePath = NSHomeDirectory();

    

    // 获取Caches

    // directory:搜索哪个文件夹

    // domainMask:在哪个范围内搜索,在用户的范围下 NSUserDomainMask

    // expandTilde:是否展开全路径,YES

    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    

    // 拼接文件名arr.plist

    NSString *filePath = [cachePath stringByAppendingPathComponent:@"arr.plist"];

    

    // 存储数据

    // File:文件全路径

    [arr writeToFile:filePath atomically:YES];


(1) 读取数据

  // 读取数据

    NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];

    

    // 拼接文件名arr.plist

    NSString *filePath = [cachePath stringByAppendingPathComponent:@"arr.plist"];

    

    // 用什么对象存储就用什么对象读取

   NSArray *arr = [NSArray arrayWithContentsOfFile:filePath];

2 >偏好设置存储

* 偏好设置存储的本质也是一种plist存储方式,它主要用来存储一些键值对

(1)数据的存储

/ NSUserDefaults:用来做偏好设置存储

    // NSUserDefaults使用方式跟字典

    // account:xmg age 18

    

    // 偏好设置:如果想要快速进行键值对存储

    // 好处:不需要关心文件名

    

    [[NSUserDefaults standardUserDefaults] setObject:@"xmg" forKey:@"account"];

    

    [[NSUserDefaults standardUserDefaults] setInteger:18 forKey:@"age"];

    

    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"isOn"];

    

(2)数据的读取

NSString *account = [[NSUserDefaults standardUserDefaults] objectForKey:@"account"];

    

    NSInteger age = [[NSUserDefaults standardUserDefaults] integerForKey:@"age"];

    

3 >  归档
(1) 归档时

 // 归档:自定义对象使用归档,不能使用plist存储

    

    Person *p = [[Person alloc] init];

    

    p.name = @"xmg";

    

    p.age = 18;

    // temp

    NSString *tempPath = NSTemporaryDirectory();

    // 拼接文件名

    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];

    

    // 归档

    [NSKeyedArchiver archiveRootObject:p toFile:filePath];


(2)解档时

// temp

    NSString *tempPath = NSTemporaryDirectory();

    // 拼接文件名

    NSString *filePath = [tempPath stringByAppendingPathComponent:@"person.data"];

    

    // 解档

    Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];

(3)需要归档的自定义对象中必须遵守NSCoding协议,并且必须实现里面的归档和接档的两个方法

// 什么时候调用:自定义对象归档的时候就会调用

// 作用:告诉系统当前对象哪些属性需要归档

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeObject:_name forKey:@"name"];

    [aCoder encodeInt:_age forKey:@"age"];

}


// 什么时候调用:自定义对象解档的时候就会调用

// 作用:告诉系统当前对象哪些属性需要解档

// initWithCoder:解析文件

// initWithCoder方法调用:只要对象是通过解析文件创建的就会调用

- (instancetype)initWithCoder:(NSCoder *)aDecoder

{

    // super initWithCoder

    if (self = [super init]) {

        // 注意:一定要记住需要给成员属性赋值

        _name = [aDecoder decodeObjectForKey:@"name"];

        _age = [aDecoder decodeIntForKey:@"age"];

    }

    return self;

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值