OC底层学习笔记(4)-KVC

注:文章为自己学习李明杰老师的OC底层视频做的随手笔记
KVC的全程是key-value-coding,俗称"键值编码",可以通过一个key来访问某个属性

常见API

setValue:(nullable id) forKey:(nonnull NSString *)
setValue:(nullable id) forKeyPath:(nonnull NSString *)
valueForKey:(nonnull NSString *)
valueForKeyPath:(nonnull NSString *)

setValue:(nullable id) forKey:(nonnull NSString *)和setValue:(nullable id) forKeyPath:(nonnull NSString *)的区别
demo:
新建一个person类和cat类,person有属性age和cat,cat类有个weight的属性

image5.png

那么.再给person的age属性赋值的时候,除了点语法外,这两个方法都可用,没有区别,但是在给属性cat下的weight赋值,就只能用forKeyPath了,他俩的区别就是一个是寻找路径,一个是具体的属性名称,简单来说,keypath的功能更强大
取值方法同理

 NSLog(@"%@",[p valueForKeyPath:@"age"]);
   NSLog(@"%@",[p valueForKeyPath:@"cat.weight"]);

Q:通过KVC赋值,会不会触发KVO?

A:会

解析:
setValueForKey的原理:
重写age的set方法,发现用kvc赋值,会走age的set方法

image6.png

valueForKey,原理其实还是调用属性的get方法

image7.png

相对于KVO,KVC的东西不是特别多

你可能感兴趣的:(OC底层学习笔记(4)-KVC)