iOS数据持久化的常用方式

作者: Thinkdifferents | 来源:发表于2017-05-28 01:58 被阅读93次

    一、plist文件

    1. 什么是plist文件

    plist全称:property List 属性列表文件,plist是一个xml格式文件,后缀为.plist,只能持久化NSArray和NADictionary类型对象

    2. plist文件的作用

    作用:plist是做数据持久化的专业文件,.plist一般情况下用于存储用户密码、临时信息、简介这样的简单

    3. Plist文件特点(先将Xcode创建plist文件,再通过创建好的plist文件介绍plist文件特点)
    Plist文件特点:
    1. Plist文件的根路径只能是数组和字典(Plist文件只能持久化数组和字典对象)
    2. Plist文件的子路径只能是NSString, NSNumber, NSData, NSDate, NSBoolean, NSArray, NSDictionary类型对象
    
    4. Xcode创建plist文件
    Plist文件内容的格式是xml语法格式
    创建步骤
    1.点击File--》New File 弹出一对话框
    2.iOS程序选中iOS栏中的Resource/Mac程序选中OS X 栏中的resource
    3.点击Resource中的Property List 创建plist文件
    4.点击文件中的'+'可以添加数据
    
    5. 读取plist文件
    //将plist文件读取到数组中(类方法)
        +(id)arrayWithContentsOfFile:(NSString *)path;
    //将plist文件读取到字典中(类方法)
        +(id)dictionaryWithContentsOfFile:(NSString *)path
    

    二、 归档和反归档

    1. 什么是归档和反归档

    归档:把对象转化为二进制数据,存储到文件中

    反归档:把归档的对象文件读成原来的内存中的对象

    2. 系统类对象的归档和反归档

    系统类归档

    //NSKeyedArchiver类的方法
    + (BOOL)archiveRootObject:(id)rootObject toFile:(NSString *)path;
    系统类反归档
    //NSKeyedUnarchiver类的方法
    + (id)unarchiveObjectWithFile:(NSString *)path;
    
    3. 归档注意事项
    // 归档对象, 或数组(及其里面的对象)都要实现一个协议NSCoding
    // 为啥实现协议 : 因为归档执行ecodeWithCodeer方法,解档执行initWithCoder
    
    4. 代码实例(将一个数组进行归档)
    //文件的路径
        NSString *path = [NSString stringWithFormat:@"%@/friends.data", NSHomeDirectory()];
    // 归档:
        [NSKeyedArchiver archiveRootObject:array toFile:path];
    // 归档执行的方法
    - (void)encodeWithCoder:(NSCoder *)aCoder{
        [aCoder encodeObject:self.nickName forKey:@"nickname"];
        [aCoder encodeObject:self.sex forKey:@"sex"];
    }
    // 反归档:
        NSArray *readArray = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
    // 反归档执行的方法
    - (instancetype)initWithCoder:(NSCoder *)aDecoder{
        if (self = [super init]) {
            self.nickName = [aDecoder decodeObjectForKey:@"nickname"];
            self.sex = [aDecoder decodeObjectForKey:@"sex"];
        }
        return self;
    }
    

    三、NSUserDefault

    1. NSUserDefaults适合存储轻量级的本地数据,比如要保存一个登陆界面的数据,用户名、密码之类的,使用NSUserDefaults是首选。

    下次再登陆的时候就可以直接从NSUserDefaults里面读取上次登陆的信息。

    2. NSUserDefaults只支持: NSString, NSNumber, NSDate, NSArray, NSDictionary.
    3. 实例(存储登陆界面的用户名)

    (一)、存储数据

    // 保存用户名, 下次自动填充用户名
        NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
        [ud setValue:_usernameTextField.text forKey:@"SaveUserName"];
    // 同步到文件中
        [ud synchronize];
    

    (二)、读取数据

        NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
        NSString *username = [ud valueForKey:@"SaveUserName"];
    

    四、文件

    //文件的路径
        NSString *path = [NSString stringWithFormat:@"%@/file.text", NSHomeDirectory()];
    //实例化NSFileManager的单例对象
        NSFileManager *fileManager = [NSFileManager defaultManager];
    //创建文件
        [fileManager createFileAtPath:path contents:nil attributes:nil];
    //实例化NSFileHandle对象
        NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:path];
    // 写入数据
        NSString *string = @"jin tian tian qi zhen bu cuo";
        NSData *dataFromString = [string dataUsingEncoding:NSUTF8StringEncoding];
        [fileHandle writeData:dataFromString];
    // 读取数据
        //设置偏移量为开始位置
        [fileHandle seekToFileOffset:0];
        NSData *dataAll = [fileHandle readDataToEndOfFile];
        NSString *stringFromdataAll = [[NSString alloc]initWithData:dataAll encoding:NSUTF8StringEncoding];
    

    相关文章

      网友评论

        本文标题:iOS数据持久化的常用方式

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