国产探花免费观看_亚洲丰满少妇自慰呻吟_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 到此結束


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 南澳县| 石楼县| 楚雄市| 棋牌| 新营市| 诸城市| 浦江县| 河北省| 汨罗市| 昌吉市| 封丘县| 龙口市| 嘉祥县| 铜山县| 吉首市| 时尚| 和田县| 青川县| 荔浦县| 仁布县| 定陶县| 土默特右旗| 江安县| 全州县| 石棉县| 合阳县| 长泰县| 和平区| 砀山县| 青岛市| 达日县| 喀什市| 建水县| 自治县| 湘潭县| 大洼县| 长汀县| 盱眙县| 新野县| 新丰县| 上高县|