在使用kvo进行监听的时候,如何触发KVO回调
1)使用 KVC 方法
如果存在访问器方法,则会调用访问器方法, 访问器方法会调用 will/didChangeValueForKey: 方法;
如果没用访问器方法,会在 setValue:forKey 方法中调用 will/didChangeValueForKey: 方法。
2)使用访问器方法
运行时会重写访问器方法调用 will/didChangeValueForKey: 方法。因此,直接调用访问器方法改变属性值时,KVO也能监听到。
3)手动调用
在赋值前后,手动调用 will/didChangeValueForKey: 方法。
willChangeValueForKey: 内部会通过kvc拿到key对应的值.
也就是说,如果我们重写getter方法,调用willChangeValueForKey:
getter方法会调用willChangeValueForKey, willChangeValueForKey调用kvc,kvc调用getter方法,因此会死循环