iOS学习 - 数据存储

作者: 蠢萌的L君 | 来源:发表于2016-04-13 08:12 被阅读129次
    • 一般数据存储到Library/Caches文件夹中,由用户决定是否删除缓存

    Plist存储

    • 如何判断一个对象能不能plist存储,看看对象有没有writeToFile方法.
    • 获取应用沙盒文件夹方法
    NSString *homeFile = NSHomeDictionary();
    
    • 获取caches路径
    // 获取Cache文件路径
        // NSSearchPathDirectory:搜索的目录
        // NSSearchPathDomainMask:搜索范围 NSUserDomainMask:表示在用户的手机上查找
        // expandTilde 是否展开全路径,如果没有展开,应用的沙盒路径就是~
        // 存储一定要要展开路径
       
     NSString *cachePaht = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
    
       // 拼接文件名
        NSString *filePath = [cachePaht stringByAppendingPathComponent:@"personArr.plist"]; 
         // File:文件的全路径
        [arr writeToFile:filePath atomically:YES];
    
    • plist存储不能存储自定义对象

    偏好设置存储(Preference)

    • 好处
      • 不需要关心文件名
      • 快速做键值对存储
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
       
       [userDefaults setObject:@"xmg" forKey:@"account"];
       [userDefaults setObject:@"123" forKey:@"pwd"];
       [userDefaults setBool:YES forKey:@"rmbPwd"];
    // 在iOS7之前,默认不会马上把跟硬盘同步
       // 同步
       [userDefaults synchronize];
    
    NSString *pwd = [[NSUserDefaults standardUserDefaults] objectForKey:@"pwd"];
    

    自定义对象存储(归档)

    • 将自定义对象归档

    • 必须遵守NSCoding协议

    • 实现协议方法

    • 归档

    Person *p = [[Person alloc] init];
        p.age = 18;
        
        // 获取cache
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        // 获取文件的全路径
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
        
        // 把自定义对象归档
        [NSKeyedArchiver archiveRootObject:p toFile:filePath];
    
    • 解档
        // 获取cache
        NSString *cachePath = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES)[0];
        
        // 获取文件的全路径
        NSString *filePath = [cachePath stringByAppendingPathComponent:@"person.data"];
        
        // 解档
        Person *p = [NSKeyedUnarchiver unarchiveObjectWithFile:filePath];
    
    • 自定义对象
    #import "Person.h"
    
    @implementation Person
    
    // 什么时候调用:自定义对象归档的时候
    
    // 作用:用来描述当前对象里面的哪些属性需要归档
    - (void)encodeWithCoder:(NSCoder *)aCoder
    {
        // name
        [aCoder encodeObject:_name forKey:@"name"];
        
        // age
        [aCoder encodeInt:_age forKey:@"age"];
        
    }
    
    // 什么时候调用:解档对象的时候调用
    
    // 作用:用来描述当前对象里面的哪些属性需要解档
    // initWithCoder:就是用来解析文件的。
    - (id)initWithCoder:(NSCoder *)aDecoder
    {
        // super:NSObject
    #warning 什么时候需要调用initWithCoder 父类遵守NSCoding协议的时候,调用super initWithCoder
        if (self = [super init]) {
            
            // 注意:一定要给成员变量赋值
            // name
           _name = [aDecoder decodeObjectForKey:@"name"];
            
            // age
           _age = [aDecoder decodeIntForKey:@"age"];
    
        }
        return self;
        
        
    }
    
    @end
    

    相关文章

      网友评论

        本文标题:iOS学习 - 数据存储

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