zoukankan      html  css  js  c++  java
  • iOS开发之数据存储之NSData

    1、概述

    使用archiveRootObject:toFile:方法可以将一个对象直接写入到一个文件中,但有时候可能想将多个对象写入到同一个文件中,那么就要使用NSData来进行归档对象。

    NSData可以为一些数据提供临时存储空间,以便随后写入文件,或者存放从磁盘读取的文件内容。可以使用[NSMutableData data]创建可变数据空间。

    2、归档2Person对象到同一文件中

    归档(编码):

    // 新建一块可变数据区

    NSMutableData *data = [NSMutableData data];

    // 将数据区连接到一个NSKeyedArchiver对象

    NSKeyedArchiver *archiver = [[[NSKeyedArchiver alloc] initForWritingWithMutableData:data] autorelease];

    // 开始存档对象,存档的数据都会存储到NSMutableData中

    [archiver encodeObject:person1 forKey:@"person1"];

    [archiver encodeObject:person2 forKey:@"person2"];

    // 存档完毕(一定要调用这个方法)

    [archiver finishEncoding];

    // 将存档的数据写入文件

    [data writeToFile:path atomically:YES];

    3、从同一文件中恢复2Person对象

    恢复(解码):

    // 从文件中读取数据

    NSData *data = [NSData dataWithContentsOfFile:path];

    // 根据数据,解析成一个NSKeyedUnarchiver对象

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];

    Person *person1 = [unarchiver decodeObjectForKey:@"person1"];

    Person *person2 = [unarchiver decodeObjectForKey:@"person2"];

    // 恢复完毕

    [unarchiver finishDecoding];

    4、利用归档实现深复制

    比如对一个Person对象进行深复制:

    // 临时存储person1的数据

    NSData *data =

    [NSKeyedArchiver archivedDataWithRootObject:person1];

    // 解析data,生成一个新的Person对象

    Student *person2 =

    [NSKeyedUnarchiver unarchiveObjectWithData:data];

    // 分别打印内存地址

    NSLog(@"person1:0x%x", person1); // person1:0x7177a60

    NSLog(@"person2:0x%x", person2); // person2:0x7177cf0

  • 相关阅读:
    Java之ServiceLoader
    docker学习(3)--Dockfile详解
    docker学习(2)--基础命令
    docker学习(1)--基础概念
    dubbo学习(1)--简单的入门搭建实例
    Flume搭建及学习(基础篇)
    VM下--Linux根分区磁盘扩容
    Windows10下简单搭建zookeeper
    Windows10下搭建TensorFlow环境
    cmath库函数
  • 原文地址:https://www.cnblogs.com/lifengfneg/p/4773927.html
Copyright © 2011-2022 走看看