Skip to content

Files

Latest commit

 

History

History
 
 

KVC&KVO的本质

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

KVC、KVO的本质

添加观察者后,KVO利用runtime生成一个NSKVONOtifying_子类,并重写set方法。修改属性值时触发KVO。

NSKVONotifying

使用KVC设值时,setValue:forKey:原理如下:

  • 先查找setKey:_setKey:方法,如果找到了,直接传递参数,调用方法;如果找不到,进入下一步。
  • 查看accessInstanceVariableDirectly方法返回值,如果返回NO,即不允许访问成员变量,则调用setValue:forUndefinedKey:方法,并抛出NSUnknownKeyException异常;如果返回YES,进入下一步。
  • 按照_key_isKeykeyisKey顺序查找成员变量,如果找到了成员变量,直接赋值。如果找不到,则调用setValue:forUndefinedKey:方法,并抛出NSUnknownKeyException异常。

setValueForKey

详细介绍查看下面文章:

https://github.com/pro648/tips/blob/master/sources/KVC、KVO的本质.md