代码改变世界

iOS--KVC&KVO

2017-05-16 18:23  doudo  阅读(190)  评论(0编辑  收藏  举报

一、KVC

通过关键字,访问属性及成员变量。

1.kvc当调用setValue:属性值 forKey:@”name“的代码时,底层的执行机制(顺序)如下:

①.set方法:set<Key> (注意,通过属性自动合成的set方法也算)

②.(BOOL)accessInstanceVariablesDirectly方法有没有返回YES,默认该方法会返回YES,继续向下寻找。

(如果你重写了该方法让其返回NO的话,那么在这一步KVC会直接执行⑤setValue:forUNdefinedKey:方法,不过一般开发者不会这么做。所以,如果想让自己的类禁用kvc,可以用此方法返回NO,不过记得属性会自动合成set方法)

 

②._<key>成员变量

③._is<Key>成员变量

④.<key>和is<Key>成员变量

⑤.执行该对象的setValue:forUNdefinedKey:方法,默认是抛出异常。

2.当调用valueForKey:@"name"时,执行机制(顺序)如下:

①.get<Key>,<key>,is<Key> ,这些get方法