KVC底层实现
2016-09-11 本文已影响0人
夏天不冷
拿字符串与当前类的属性进行匹配.如果匹配到,就给该属性赋值.
[flagItem setValue:obj forKeyPath:key];
(注意:这个字符串指的一般是plist文件中字典的key值,所以如果想字典转模型,在模型中声明的属性名称最好与plist文件中key值一致,这时才可以使用KVC)
1.会找有没有跟key值相同名称的set方法,就会调用set方法,把obj传入
2.如果说没有set方法.那么它会去找没有相同名称,并且带有下划线的成员属性,如果有就会给该属性赋值.
3.如果也没有带有下划线的成员属性,有没有跟它相同名称的成员属性,如果有就会给该属性赋值.
4.如果还没有跟它相同名称的成员属性,就会调用setValue:(id)value forUndefinedKey:
5.如果没有实现setValue: forUndefinedKey:就直接报错
应用场景:一般利用底层实现的第一步,重写setter方法。
![ ![3.png](https://img.haomeiwen.com/i2824442/2069a598f0f26c84.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](https://img.haomeiwen.com/i2824442/70bf68445eedb725.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)