首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Objective-C中转换对象

在Objective-C中,可以使用NSKeyedArchiverNSKeyedUnarchiver来实现对象的序列化和反序列化。以下是一个简单的示例:

代码语言:objective-c
复制
#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类来反序列化对象,并将结果存储在一个新的对象中。

注意,在使用NSKeyedArchiverNSKeyedUnarchiver时,需要确保所有序列化的对象都实现了NSCoding协议,并且所有属性都可以被序列化。此外,如果对象中包含不可序列化的属性,例如NSDate对象,则需要在encodeWithCoder:initWithCoder:方法中进行适当的处理。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券