国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 华宁县| 娄烦县| 南和县| 祁门县| 油尖旺区| 阿拉尔市| 江北区| 攀枝花市| 龙门县| 军事| 金沙县| 游戏| 象山县| 库伦旗| 宜丰县| 上高县| 岐山县| 文安县| 祥云县| 衡阳市| 于都县| 普兰店市| 图们市| 焦作市| 黔东| 衡水市| 龙口市| 双流县| 上虞市| 方城县| 论坛| 格尔木市| 孟村| 兴海县| 泾阳县| 阆中市| 平湖市| 沙洋县| 丹东市| 桃江县| 平利县|