2.实现observeValueForKeyPath:ofObject:change:context:方法,这个方法当观察的属性变化时会自动调用
3.取消注册观察removeObserver:forKeyPath:context: KVO与delegate的区别: 和delegate一样,KVO和NSNotification的作用也是类与类之间的通信,与delegate不同的是: 1)这两个都是负责发出通知,剩下的事情就不管了,所以没有返回值; 2)delegate只是一对一,而这两个可以一对多。这两者也有各自的特点。 delegate的优势:
1.非常严格的语法。所有监听事件必须是在delegate协议中有清晰的定义。
2.如果delegate中的一个方法没有实现那么就会出现编译警告/错误
3.协议必须在controller的作用域范围内定义
4.在一个应用中的控制流程是可跟踪的并且是可识别的;
5.在一个控制器中可以定义定义多个不同的协议,每个协议有不同的delegates
6.没有第三方对象要求保持/监视通信过程。
7.能够接收调用的协议方法的返回值。这意味着delegate能够提供反馈信息给controller
delegate的劣势:
1.需要定义很多代码:
- 协议定义;
- controller的delegate属性;
- 在delegate本身中实现delegate方法定义
2.在释放代理对象时,需要小心的将delegate改为nil。一旦设定失败,那么调用释放对象的方法将会出现内存crash
3.在一个controller中有多个delegate对象,并且delegate是遵守同一个协议,但还是很难告诉多个对象同一个事件,不过有可能。