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保存到文件或者传输给其他系统。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。