KVC的实现原理

是一种可以通过字符串的名字来访问类属性的机制,而不是通过setter、getter方法,

设值原理:1.首先会搜索是否有setter方法,没有则搜索是否有setIsKey方法,如果找到了方法,就传递参数,调用方法。

2.如果没找到setkey方法。调用是否能够访问成员变量,如果返回yes,就会按照,_key._isKey,key,isKey 顺序查找成员变量,找到成员变量后直接赋值,如果没找到也会调用setvalue:forUndefineKey,并抛出异常

取值原理跟设值原理很像,不再赘述

直接修改成员变量不会触发KVO,但是KVC可以,说明kvc内部做了监听

你可能感兴趣的:(KVC的实现原理)