KVO的基本使用步骤
- 添加观察者
1 [被观察者 addObserver:观察者 forKeyPath:@"被观察的属性" options:<#(NSKeyValueObservingOptions)#> context:<#(nullable void *)#>]
- 实现监听方法
1 - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context
- 移除观察者
[_p removeObserver:self forKeyPath:@"被观察的属性"];
- 依赖属性的用法
+ (NSSet<NSString *> *)keyPathsForValuesAffecting<#DependentKey#>
{
return [NSSet setWithObjects:@"<#keyPath#>", nil];
}
KVO原理分析
- 添加观察这时 -> 系统自动生成了被观察者的子类
- 被观察者的isa 指针正想子类 并自动添加了一些方法
- 移除操作 -> 被观察者isa指针从子类指回父类