iOS本地数据持久化

作者: 论丶道 | 来源:发表于2016-01-20 23:25 被阅读292次

    在iOS开发中常常需要将本地数据存储起来 通常有如下几种方式

    • plist存储
    • 偏好设置存储
    • 归档存储
    • SQLite存储
    • core data存储
      今天简单介绍一下前面三种存储方式
      • plist存储 --plist存储的本质就是生成一个plist文件 是用来存储数组和字典,但是需要注意的是自定义对象不能用plist来进行存储
        plist是什么类型存储的 读取也必须是同样的类型
      • plist存储的存储数据(比如想要存储一个数组)
        NSArray *array = @[@"jack",@26];
        //获取caches文件夹路径
        //NSSearchPathDirectory directory -->搜索文件夹
        //NSSearchPathDomainMask domainMask -->在哪个范围内查找
        //BOOL expandTilde -->是否展开
       NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        //拼接文件名
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"array.plist"];
        //存储数据
        [array writeToFile:filePath atomically:YES];
    
    - plist存储的数据读取(比如想要读取一个数组)
    
        //获取caches文件夹路径
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        //拼接文件名
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"array.plist"];
        //读取文件
        NSArray *array = [NSArray arrayWithContentsOfFile:filePath];
    
    • 偏好设置存储 --偏好设置存储是以字典的形式进行偏好设置,用法跟字典一样 偏好设置存储主要用到一个关键类NSUserDefaults
      偏好设置存储的好处:不需要关心文件名 可以快速进行键值对存储 可以存储基本数据类型
      • 偏好设置存储
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setObject:@"jack" forKey:@"name"];
        [defaults setInteger:26 forKey:@"age"];
    
    - 偏好设置读取
    
    NSString *name = [[NSUserDefaults standardUserDefaults] objectForKey:@"name"];
        NSInteger age = [[NSUserDefaults standardUserDefaults] integerForKey:@"age"];
    
    • 归档存储 --任何对象都可以进行归档存储 自定义对象也可以
      NSKeyedArchiver专门用来做自定义对象归档
      • 归档存储(比如想要存储一个自定义对象car)
    ZDCar *car = [[ZDCar alloc] init];
        car.brand = @"BMW";
        car.color = @"black";
        //获取caches文件夹
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        //拼接文件名
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"car.xxoo"];
        //存储数据
        [NSKeyedArchiver archiveRootObject:car toFile:filePath];
    
    - 归档存储的读取
    
    //获取caches文件夹
        NSString *cachesPath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        //拼接文件名
        NSString *filePath = [cachesPath stringByAppendingPathComponent:@"car.xxoo"];
        //读取数据
        ZDCar *car = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    

    注意:在调用
    [NSKeyedArchiver archiveRootObject:car toFile:filePath];和[NSKeyedUnarchiver unarchiveObjectWithFile:filePath];这两个方法时
    底层会调用
    - (void)encodeWithCoder:(NSCoder *)aCoder
    - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder这两个方法 所以需要在自定义的类中遵守<NSCoding>这个协议并实现上述两个方法
    还有一点需要注意 在实现- (nullable instancetype)initWithCoder:(NSCoder *)aDecoder这个方法时当父类遵守了<NSCoding>这个协议就需要调用[super initWithCoder:aDecoder] 反之则调用[super init]

    相关文章

      网友评论

        本文标题:iOS本地数据持久化

        本文链接:https://www.haomeiwen.com/subject/fdelkttx.html