用NSCoding协议完成“编码/解码”操作-Object-C

本文详细介绍了在Objective-C中如何实现NSCoding协议,以对自定义类对象进行编码与解码操作。包括关键方法实现、归档与反归档过程,以及注意事项,如确保编码解码key的一致性、每种基本数据类型的对应编码解码方法使用等。

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

http://blog.sina.com.cn/s/blog_7b9d64af01019kk5.html

Object-C中我们可以对 NSDate, NSNumber, NSString, NSArray, or NSDictionary对象进行“编码/解码”的操作。


但是,当我们对自己定义的对象进行“编码/解码”操作时,却需要实现NSCoding协议的相关方法来告诉程序如何来“编码/解码”我们自己的对象!
NSCoding协议的方法:
- (void)encodeWithCoder:(NSCoder *)aCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;


那么,我们就对类实现“编码/解码”协议:
在AddressCard.h中,申明实现NSCoding协议:
@interface AddressCard : NSObject<NSCopying,NSCoding>


在AddressCard.m中,实现NSCoding协议的编码/解码 方法:
#pragma mark- NSCoding
- (void)encodeWithCoder:(NSCoder *)aCoder{
    [aCoder encodeObject:self.name forKey:@"AddressCard_name"];
    [aCoder encodeObject:self.email forKey:@"AddressCard_email"];
    [aCoder encodeInt32:self.salary forKey:@"AddressCard_salary"];


}
- (id)initWithCoder:(NSCoder *)aDecoder{
    _name=[[aDecoder decodeObjectForKey:@"AddressCard_name"] retain];
    _email=[[aDecoder decodeObjectForKey:@"AddressCard_email"] retain];
    _salary=[aDecoder decodeInt32ForKey:@"AddressCard_salary"];
    return self;


}
这样,我们就能够归档自己定义的类对象。


NSString *filePhyName=[filePath stringByAppendingPathComponent:@"ObjectFile"];
    BOOL isSuccess=NO;
    isSuccess= [NSKeyedArchiver archiveRootObject:objArray toFile:filePhyName];
    if (isSuccess) {
        NSLog(@"Success");
    }else{
        NSLog(@"False");
    }
    
    // 反归档
    NSMutableArray *myObj=[NSKeyedUnarchiver unarchiveObjectWithFile:filePhyName];
    for (AddressCard *theCard in myObj) {
        [theCard print];
    }




从输出可以看到,归档成功!
归档需要注意的是:
1.同一个对象属性,编码/解码的key要相同!
2.每一种基本数据类型,都有一个相应的编码/解码方法。
如:encodeObject方法与decodeObjectForKey方法,是成对出现的。
3.如果一个自定义的类A,作为另一个自定义类B的一个属性存在;那么,如果要对B进行归档,那么,B要实现NSCoding协议。并且,A也要实现NSCoding协议。


希望对您有所帮助

内容概要:本文详细介绍了基于FPGA的144输出通道可切换电压源系统的设计与实现,涵盖系统总体架构、FPGA硬件设计、上位机软件设计以及系统集成方案。系统由上位机控制软件(PC端)、FPGA控制核心和高压输出模块(144通道)三部分组成。FPGA硬件设计部分详细描述了Verilog代码实现,包括PWM生成模块、UART通信模块和温度监控模块。硬件设计说明中提及了FPGA选型、PWM生成方式、通信接口、高压输出模块和保护电路的设计要点。上位机软件采用Python编写,实现了设备连接、命令发送、序列控制等功能,并提供了一个图形用户界面(GUI)用于方便的操作和配置。 适合人群:具备一定硬件设计和编程基础的电子工程师、FPGA开发者及科研人员。 使用场景及目标:①适用于需要精确控制多通道电压输出的实验环境或工业应用场景;②帮助用户理解和掌握FPGA在复杂控制系统中的应用,包括PWM控制、UART通信及多通道信号处理;③为研究人员提供一个可扩展的平台,用于测试和验证不同的电压源控制算法和策略。 阅读建议:由于涉及硬件和软件两方面的内容,建议读者先熟悉FPGA基础知识和Verilog语言,同时具备一定的Python编程经验。在阅读过程中,应结合硬件电路图和代码注释,逐步理解系统的各个组成部分及其相互关系。此外,实际动手搭建和调试该系统将有助于加深对整个设计的理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值