KVC底层实现

  拿字符串与当前类的属性进行匹配.如果匹配到,就给该属性赋值.  
   [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](http://upload-images.jianshu.io/upload_images/2824442-2069a598f0f26c84.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) ](http://upload-images.jianshu.io/upload_images/2824442-70bf68445eedb725.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • s大家从网上的资料也可以查找出对KVC的描述。那我也就站在前人的基础上做一个小小的偷懒,复制一段网上的资料。 KV...
    阿汤8阿义阅读 6,276评论 0 2
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,423评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,403评论 19 139
  • 吾身,吾行,吾终吾悟。依旧前程似锦。汝看,汝笑,汝言汝叹。必将双目失明。
    毛润生阅读 1,215评论 0 0
  • 这一生我们都将走在回家的路上,那里满是牵挂。 请了一个小长假决定回趟家,于是清晨便踏上了长长的回家路,因为前一晚梦...
    兰花菜阅读 1,852评论 0 1