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

首頁 > 系統 > iOS > 正文

iOS 對象的歸檔、解檔 runtime

2019-11-09 16:25:09
字體:
來源:轉載
供稿:網友

iOS 對象的歸檔、解檔 runtime

若要實例對象實現歸檔解檔,需要該類遵守NSCoding協議,及以下協議方法

項目中以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++) { //獲取當前遍歷的屬性的名稱 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++) { //獲取當前遍歷到的屬性名稱 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; }

歸檔和接檔的操作以類方法實現如下(可自己創建管理類分離出去): ArchiveFilePath 為文件存儲路徑 + (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 到此結束


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵丘县| 庄河市| 安义县| 朝阳县| 奇台县| 黑山县| 平原县| 始兴县| 墨竹工卡县| 阳信县| 南涧| 旬邑县| 万荣县| 湘阴县| 朔州市| 祁门县| 舟曲县| 衢州市| 德州市| 大洼县| 楚雄市| 濮阳县| 静乐县| 谷城县| 碌曲县| 奉贤区| 什邡市| 丁青县| 屯门区| 大庆市| 鄂州市| 安义县| 方正县| 大冶市| 车险| 洱源县| 东丰县| 县级市| 长宁区| 阳东县| 酉阳|