zoukankan      html  css  js  c++  java
  • OC中保存自定义类型对象的持久化方法

    OC中如果要将自定义类型的对象保存到文件中,必须进行以下三个条件:

    想要把存放自定义类型的数组进行 持久化(就是将内存中的临时数据以文件<数据库等>的形式写到磁盘上)必须满足:

     1. 自定义对象必须要序列化(将数据有序的存放)

     2. 需要使用归档来进行持久化

     3. 如果要加载持久化文件需要进行反序列化(就是将有序存放的数据读取并变成自定义对象)

    第一要将自定义类型序列化以及第三步并将文件反序列化必须实现OC中的  <NSCoding>协议。

    以Student类为例

    @interface Student : NSObject<NSCoding>
    @property(nonatomic,copy)NSString * name;
    @property(nonatomic,copy)NSString * pwd;
    @end

    进行序列化的方法为

    -(void)encodeWithCoder:(NSCoder *)aCoder
    {
        [aCoder encodeObject:self.name forKey:@"name"];
        [aCoder encodeObject:self.pwd forKey:@"pwd"];
    }

    进行反序列化的方法为:

    -(id)initWithCoder:(NSCoder *)aDecoder
    {
        self= [super init];
        if(self)
        {
            self.name=[aDecoder decodeObjectForKey:@"name"];
            self.pwd=[aDecoder decodeObjectForKey:@"pwd"];     
        }
        return self;
    }

    需要注意的是,我们在类的声明文件中并不需要声明这两个文件,因为我们只在本类中使用这两个方法,所以我们只需要在实现文件中实现这两个方法就可以了。

    值得注意的是归档操作在外面实现这个协议的两个方法时就已经由系统实现,因此我们并不需要实现归档操作。我们需要的仅仅是将文件写入到指定的文件中,以及将该文件读取出来。我们可以理解为,我们在实现读取和写入的方法的过程中,实现了序列化和反序列化操作。进而实现了归档操作。写入文件和读取文件的代码如下:

            [NSKeyedArchiver archiveRootObject:stuArr toFile:@"/Users/Administrator/Desktop/4.plist"];
            [NSKeyedUnarchiver unarchiveObjectWithFile:@"/Users/Administrator/Desktop/4.plist"];

    遍历该文件所包含的对象即可得到文件中所包含的对象的所有属性

            for(Student * s in stuArr)
            {
                NSLog(@"%@,%@",s.name,s.pwd);
            }

            

  • 相关阅读:
    嵌入式驱动开发之sensor---sensor 图形传感器调试
    时下世界上最先进的液晶面板技术---ips
    多媒体开发之rtp 打包发流---udp 丢包问题
    多媒体开发之rtp 打包发流---同网段其他机子sdp 播放不了
    AutoCAD LoadLibrary Failed with error 126 Message
    OpenCV获取与设置像素点的值的几个方法
    四元数与旋转
    圆点博士小四轴主程序状态机结构
    四元数(Quaternion)和旋转 +欧拉角
    PID控制算法
  • 原文地址:https://www.cnblogs.com/zhendiao/p/4705832.html
Copyright © 2011-2022 走看看