zoukankan      html  css  js  c++  java
  • iOSiOS开发之数据存储之NSKeyedArchiver

    1、概述

    NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象。如果对象是NSString、NSDictionary、NSArray、NSData、NSNumber等类型,可以直接用NSKeyedArchiver进行归档和恢复。不是所有的对象都可以直接用这种方法进行归档,只有遵守了NSCoding协议的对象才可以被存储。

    NSCoding协议中的2个方法:

    1encodeWithCoder:

    存对象时该方法必须实现,每次归档对象时,都会调用这个方法。一般在这个方法里面指定如何归档对象中的每个实例变量,可以使用encodeObject:forKey:方法归档实例变量。即指定存储哪些属性和在文件中以什么名字作为key存储这些属性。例如:

    [encode  encodeObject:_name  forKey:@”name”];

    系统下次从文件中取_name的值就自动用name这个key去取,后面再通过initWithCoder方法把取出的值赋值给_name。类似地:

    [encode  encodeInt:_age  forKey:@”age”];

    2initWithCoder:

    取对象时该方法必须实现,每次从文件中恢复(解码)对象时,都会调用这个方法。一般在这个方法里面指定如何解码文件中的数据为对象的实例变量,可以使用decodeObjectForKey方法解码实例变量。即指定读取文件中哪个东西变成属性。例如:

    -(id)initWithCoder:NSCoder *)decoder

    {

    if(self = [super init]){

      _name = [decoder decodeObjectForKey:@”name”];

    }

    return self;

    }

    2、归档NSArray

    归档一个NSArray对象到Documents/array.archive:

    其中扩展名可以任意写,不写也可以。

    NSArray *array = [NSArray arrayWithObjects:@”a”,@”b”,nil];

    [NSKeyedArchiver archiveRootObject:array toFile:path];

    归档成功将如下图:

    3、恢复(解码)NSArray对象

    4、归档对象的注意

    如果父类也遵守了NSCoding协议,请注意:

    (1)应该在encodeWithCoder:方法中加上一句

    [super encodeWithCode:encode];

    确保继承的实例变量也能被编码,即也能被归档

    (2)应该在initWithCoder:方法中加上一句

    self = [super initWithCoder:decoder];

    确保继承的实例变量也能被解码,即也能被恢复

  • 相关阅读:
    PHP+AJAX 验证码验证用户登录
    2014-05-09 总结
    2014-05-08 总结(补充)
    2014-05-08 总结
    2014-05-07 总结
    14-6-2
    php
    5-23
    PHP
    5-22
  • 原文地址:https://www.cnblogs.com/lifengfneg/p/4773926.html
Copyright © 2011-2022 走看看