iOS 對(duì)象的歸檔、解檔 runtime
若要實(shí)例對(duì)象實(shí)現(xiàn)歸檔解檔,需要該類遵守NSCoding協(xié)議,及以下協(xié)議方法
項(xiàng)目中以YCArchiveBase類為例,可直接添加屬性使用
(void)encodeWithCoder:(NSCoder *)aCoder{ unsigned int count = 0; //取出所有屬性 objc_property_t *properties = class_copyPropertyList([self class], &count); //遍歷屬性 for (int i = 0; i < count; i++) { //獲取當(dāng)前遍歷的屬性的名稱 const char *propertyName = property_getName(properties[i]); NSString *name = [NSString stringWithUTF8String:propertyName];
id value = [self valueForKey:name];[aCoder encodeObject:value forKey:name];} }
(instancetype)initWithCoder:(NSCoder *)aDecoder{
unsigned int count =0; //1.取出所有的屬性 objc_property_t *propertes = class_copyPropertyList([self class], &count); //2.遍歷所有的屬性 for (int i = 0; i < count; i++) { //獲取當(dāng)前遍歷到的屬性名稱 const char *propertyName = property_getName(propertes[i]); NSString *name = [NSString stringWithUTF8String:propertyName]; //解歸檔前遍歷得到的屬性的值 id value = [aDecoder decodeObjectForKey:name]; // self.className = [decoder decodeObjectForKey:@”className”]; [self setValue:value forKey:name]; } return self; }
歸檔和接檔的操作以類方法實(shí)現(xiàn)如下(可自己創(chuàng)建管理類分離出去): ArchiveFilePath 為文件存儲(chǔ)路徑 + (void)archiveWithObjc:(id)objc{
NSMutableData *data = [NSMutableData data];//歸檔NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data];[archiver encodeObject:objc forKey:@"archive"];[archiver finishEncoding];NSLog(@"data:%@",data);[data writeToFile:ArchiveFilePath atomically:YES];}
(id)unarchive{ //解檔 NSData *unData = [NSData dataWithContentsOfFile:ArchiveFilePath]; NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:unData]; YCArchiveBase *unmodel = [unarchiver decodeObjectForKey:@”archive”]; return unmodel; }使用: YCArchiveBase *model = [[YCArchiveBase alloc]init]; model.name = @”testname”; model.num = 23; model.address = @”address”; model.ddd = 23.0;
//歸檔[YCArchiveBase archiveWithObjc:model];//解檔YCArchiveBase *unmodel = [YCArchiveBase unarchive];NSLog(@"archiver:%@",unmodel.name);git: https://github.com/yuchenArron/Archiver-Demo 到此結(jié)束
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注