iOS中的归档(Archiving)是将对象转换为二进制数据,以便在磁盘上进行存储或传输。反归档(Unarchiving)则是将二进制数据转换回对象。

在Objective-C中,可以使用NSKeyedArchiver和NSKeyedUnarchiver类来实现归档和反归档。

归档的代码示例:

// 创建要归档的对象
MyObject *object = [[MyObject alloc] init];
object.name = @"John";
object.age = 25;

// 归档对象
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:object];

// 将归档数据写入文件
NSString *filePath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
NSString *fileName = [filePath stringByAppendingPathComponent:@"archive.dat"];
[data writeToFile:fileName atomically:YES];

反归档的代码示例:

// 从文件读取归档数据
NSData *data = [NSData dataWithContentsOfFile:fileName];

// 反归档数据为对象
MyObject *object = [NSKeyedUnarchiver unarchiveObjectWithData:data];

// 使用反归档得到的对象
NSLog(@"Name: %@", object.name);
NSLog(@"Age: %ld", object.age);

需要注意的是,被归档的对象需要实现NSCoding协议,包括实现initWithCoder:方法和encodeWithCoder:方法。这些方法用于在归档和反归档时对对象进行编码和解码操作。

@interface MyObject : NSObject <NSCoding>

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

@end

@implementation MyObject

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

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

@end

以上是使用Objective-C实现归档和反归档的代码示例。在Swift中,也有类似的归档和反归档机制,但使用的是Codable协议来替代NSCoding协议

iOS model 归档反归档 oc代码

原文地址: http://www.cveoy.top/t/topic/iufc 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录