iOS model 归档反归档 oc代码
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协议
原文地址: http://www.cveoy.top/t/topic/iufc 著作权归作者所有。请勿转载和采集!