在Objective-C中,可以使用NSKeyedArchiver
和NSKeyedUnarchiver
来实现对象的序列化和反序列化。以下是一个简单的示例:
#import<Foundation/Foundation.h>
@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
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [[Person alloc] init];
person.name = @"John";
person.age = 30;
// 序列化对象
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:person];
// 反序列化对象
Person *unarchivedPerson = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSLog(@"Name: %@, Age: %ld", unarchivedPerson.name, (long)unarchivedPerson.age);
}
return 0;
}
在这个示例中,我们定义了一个Person
类,并实现了NSCoding
协议。在encodeWithCoder:
方法中,我们使用NSCoder
对象来编码Person
对象的属性。在initWithCoder:
方法中,我们使用NSCoder
对象来解码Person
对象的属性。
我们可以使用NSKeyedArchiver
类来序列化对象,并将结果存储在NSData
对象中。我们可以使用NSKeyedUnarchiver
类来反序列化对象,并将结果存储在一个新的对象中。
注意,在使用NSKeyedArchiver
和NSKeyedUnarchiver
时,需要确保所有序列化的对象都实现了NSCoding
协议,并且所有属性都可以被序列化。此外,如果对象中包含不可序列化的属性,例如NSDate
对象,则需要在encodeWithCoder:
和initWithCoder:
方法中进行适当的处理。
领取专属 10元无门槛券
手把手带您无忧上云