[C/OC的那点事儿]类成员的序列化和反序列化,又"文件读写" (依赖学生成绩管理系统).

本文详细介绍了如何在Objective-C中利用NSCoding协议进行对象的存档与读取操作,包括编码与解码过程,并通过实例展示了如何将对象序列化为NSData并从文件中反序列化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们都知道,如果在OC中要实现存档和读取,可以使用c或者oc.但是如果成员是oc的类成员的话,那使用

NSCoding 进行存档和取档就相对简单一点.

1.下面我们就讲述下NSCoding协议

一般来说,NSCoding协议在 定义类的方法中实现.

如,Person.h,Student.h中声明

-(void)encodeWithCoder:(NSCoder *)aCoder  //对类中的属性进行编码,又叫序列化.
{
    [aCoder encodeInt:stuID forKey:@"id"];
    [aCoder encodeObject:name forKey:@"name"];
    [aCoder encodeInt:age forKey:@"age"];
    [aCoder encodeInt:score forKey:@"score"];
    

}

-(id)initWithCoder:(NSCoder *)aDecoder //首先调用父类的init方法,然后按照key对属性进行解码,又叫反序列化.
{
    if (self = [super init]) {
        self.stuID = [aDecoder decodeIntForKey:@"id"];
        self.name = [aDecoder decodeObjectForKey:@"name"];
        self.age = [aDecoder decodeIntForKey:@"age"];
        self.score = [aDecoder decodeIntForKey:@"score"];
    }
    return  self;

}


2.下面的重点是如何使用NSData 进行文件的存取操作.

//1)写入文件
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:studentArray ]; //studentArray 是一个 array类型的,但是该位置要求的类型是id//,所以说我们可以使用很多类型编码成 NSData类型.然后就是文件的写入了.
    
    [data writeToFile:filepath atomically:YES];
//2)读文件
   NSMutableData *Data = [NSMutableData dataWithContentsOfFile:filepath]; //从文件中读出NSData.
    self.studentArray = [NSKeyedUnarchiver unarchiveObjectWithData:Data];//解冻,或者说是解码,反序列化.


  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值