如何通过NSCoding和NSSecureCoding进行对象序列化

发布时间:2024-06-03 13:00:08 作者:小樊
来源:亿速云 阅读:91

NSCoding和NSSecureCoding都是Objective-C中用于对象序列化和反序列化的协议,可以通过实现这两个协议来对对象进行序列化。

要实现NSCoding协议,首先需要在对象中实现两个方法:- (void)encodeWithCoder:(NSCoder *)aCoder和- (instancetype)initWithCoder:(NSCoder *)aDecoder。在encodeWithCoder方法中,将对象的属性编码到aCoder中;在initWithCoder方法中,从aDecoder中解码出属性值。

示例代码如下:

@interface Person : NSObject <NSCoding>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;

@end

@implementation Person

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

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

@end

要实现NSSecureCoding协议,需要在对象中实现一个类方法+ (BOOL)supportsSecureCoding,在这个方法中返回YES表示该对象支持安全编码。

示例代码如下:

@interface Person : NSObject <NSSecureCoding>

@property (nonatomic, strong) NSString *name;
@property (nonatomic, assign) NSInteger age;

@end

@implementation Person

+ (BOOL)supportsSecureCoding {
    return YES;
}

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

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

@end

通过实现NSCoding和NSSecureCoding协议,可以将对象序列化为NSData,然后可以将NSData保存到文件或者传输给其他系统。

推荐阅读:
  1. Foundation 起步介绍
  2. 众OEM厂商助阵微软推Foundation版服务器系统的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

foundation

上一篇:什么情况下会使用到NSProxy

下一篇:NSThread、GCD和NSOperation的对比

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》