YYModel
YYModel copied to clipboard
High performance model framework for iOS/OSX.
YYModel实现了json的健值对与对象属性之间的双向映射,最基本的操作就是健值对转化为模型属性和其反向操作,使用instruments我们也可清晰的观察到双向转化占用了很大的时间比例。 下面只讨论json到对象的单向映射,在问题域上有下面7个基本问题需要考虑: 1)健值对与属性的映射是单射还是多射? 2)在嵌套的健值模型中,如何实现多层json结构扁平化? 3)在嵌套的健值模型中,如何把内层的复杂结构映射到当前模型的模型属性上? 4)如何实现多态映射? 5)如何根据json外层数据实现下层json的多态映射? 6)如何在模型转化的过程中清洗数据? 7)在OOP范式下YYModel还有什么设计缺陷吗?
直接看代码,在函数 `ModelSetValueForProperty` 中: https://github.com/ibireme/YYModel/blob/1230e605c1abdcd34bf0adb371d89783ff39a856/YYModel/NSObject%2BYYModel.m#L911-L913 很明显,`newOne` 自创建后,就没有被修改过,所以 913 行的 `if` 语句判断了个寂寞,912 行里的数据校验即使返回 NO ,对象 `newOne` 依然会被添加到数组中。 这个 BUG 应该是存在了 N 年之久~
当类中有属性,类似@property (nonatomic, assign) char * hhh; 然后调用modelHash报错,错误原因是Thread 1: "[ valueForUndefinedKey:]: this class is not key value coding-compliant for the key 意思是valueforkey 没有这个类型的key,然后崩溃,想知道作者如何应对这种情况
Should invalid data in the container be ignored?
项目中遇到了json转model,定义model字段类型为NSDecimalNumber,精度问题,需要框架开发人员,处理一下
id v = ((id (*)(id, SEL))(void *) objc_msgSend)((id)model, propertyMeta->_getter); value = ModelToJSONObjectRecursive(v);
出错堆栈 0 libobjc.A.dylib objc_retain + 20 1 WoZaiJia __ModelToJSONObjectRecursive_block_invoke.444 (NSObject+YYModel.m:1222) 2 CoreFoundation ___65-[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:]_block_invoke + 124 3 CoreFoundation -[__NSDictionaryM enumerateKeysAndObjectsWithOptions:usingBlock:] + 204 4 WoZaiJia ModelToJSONObjectRecursive (NSObject+YYModel.m:1276) 5 WoZaiJia -[NSObject(YYModel) yy_modelToJSONObject]...
~~@[_****_]()~~