KVO设计模式

11 8月

delegate设计模式只能在当前对象中使用,是一对一的处理关系。如果要一对多,要通知其他对象,可以使用观察者模式。

观察者模式在IOS中用KVO(NSKeyValueObserving)来实现:

  • 观察者内用addObserver注册一个被观察者
  • 观察者内用observeValueForKeyPath接收被观察者发生变化时发出的广播
  • 观察者被销毁前用removeObserver移除注册
// 观察者是 self,被观察者是 self.webView
// 监听的是被观察者(webview)的 estimatedProgress 属性,并在发生变化时接收广播
[self.webView addObserver:self forKeyPath:@"estimatedProgress" options:NSKeyValueObservingOptionNew context:nil];

- (void)observeValueForKeyPath:(nullable NSString *)keyPath ofObject:(nullable id)object change:(nullable NSDictionary *)change context:(nullable void *)context {
    ... 
}
- (void) dealloc {
    [self.webView removeObserver:self forKeyPath:@"estimatedProgress"];
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注