国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

iOS 對(duì)象的歸檔、解檔 runtime

2019-11-09 17:30:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

iOS 對(duì)象的歸檔、解檔 runtime

若要實(shí)例對(duì)象實(shí)現(xiàn)歸檔解檔,需要該類遵守NSCoding協(xié)議,及以下協(xié)議方法

項(xiàng)目中以YCArchiveBase類為例,可直接添加屬性使用

PRagma mark - NSCoding

(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é)束


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 新绛县| 高邮市| 寿阳县| 吉木萨尔县| 南澳县| 福鼎市| 马尔康县| 沁水县| 常州市| 九龙城区| 宝山区| 阿拉善右旗| 平塘县| 海口市| 靖宇县| 大宁县| 龙里县| 潜江市| 诏安县| 锡林浩特市| 玉屏| 视频| 伊宁县| 大丰市| 平邑县| 通河县| 济南市| 井研县| 张家川| 新平| 金川县| 江达县| 蒙阴县| 满城县| 图木舒克市| 天津市| 沙河市| 苏尼特左旗| 咸丰县| 汨罗市| 新兴县|