zoukankan      html  css  js  c++  java
  • Archiving

      面向对象的程序在运行时会创建一个复杂的对象图。开发者经常要以二进制流的方法序列化这个图,该过程称为archiving,也叫存档。这个二进制流可通过网络连接发送,也可以写进文件。当需要从二进制流类型重新创建对象图时,可使用unarchive.重新开始时,它将对象从编译器创建的NIB文件中unarchive就可以。

      尽管对象有成员变量,也定义了方法,但只有成员变量和类的名字可进行存档,也就是说只有数据可存档,而代码不行。假如一个程序存档一个对象,另一个程序unarchive同一个对象时,这两个程序必须有这个类的代码。

    1.NSCoder和NSCoding

      有个命令为NSCoding的protocol,假如开发者实现了NSCoding(在.h文件中指明实现了NSCoding协议),将实现下面的方法:

      -(id)initWithCoder:(NSCoder *)coder

      -(void)encodeWithCoder:(NSCoder*)coder

      NSCoder是二进制流的抽象,开发者可以把数据写入coder,也可以从coder中读取数据。对象中的initWithCoder:方法将从coder中读取数据,并将数据保存到它的成员变量。对象中的encodeWithCoder:方法读取他的实例变量的值,然后将那些值写入code。NSCoder是一个抽象类,不能被实例化。

      1.1编码

        编码常用的的一些方法:

    -(void)encodeObject:(id)anObject  forKey:(NSString*)key;

    -(void)encodeBool:(BOOL) boolv forKey:(NSString*)key;

    -(void)encodeDouble:(double)realv  forKey:(NSString*)key;

    -(void)encodeFloat:(float)realv  forKey:(NSString*)key;

    -(void)encodeInt:(int)intv  forKey:(NSString*)key;

    例如:

    -(void)encodeWithCoder:(NSCoder *)coder

    {

    //    [super encodeWithCoder:coder];

        [coder encodeObject:personName forKey:@"personName"];

        [coder encodeFloat:expectedRaise forKey:@"expectedRaise"];

        

    }

      1.2 解码

      将数据从coder中解码时,可以用以下方法:

    - (double)decodeObjectForKey:(NSString *)key

    - (double)decodeBoolForKey:(NSString *)key

    - (double)decodeDoubleForKey:(NSString *)key

    - (double)decodeFloatForKey:(NSString *)key

    - (double)decodeIntForKey:(NSString *)key

    例如:

    -(id)initWithCoder:(NSCoder *)coder

    {

        self = [super init];

        if (self) {

            personName = [coder decodeObjectForKey:@"personName"];

            expectedRaise = [coder decodeFloatForKey:@"expectedRaise"];

        }

        return self;

    }

  • 相关阅读:
    程序员的自我修养---------一个程序员应该懂点什么
    Duilib的圆环形 进度条 实现(网易云信版本)
    位定义,用于判断是否包含某属性
    Duilib的圆角矩形 抗锯齿优化 弥补RoundRect不足(网易云信borderround版本)
    exe、msi、dos、bat等静默运行,后台运行,不弹窗的解决办法
    删除桌面上有文件但提示项目不存在的方法
    MyBatis插入语句返回主键值
    django学习之Model(二)
    TCP三四次握手
    django学习之Model(一)
  • 原文地址:https://www.cnblogs.com/PJXWang/p/5332353.html
Copyright © 2011-2022 走看看