代理的使用步骤
- 定义一份代理协议
- 协议名称:类名+delegate
- 细节:
- optional
- 方法名一般以类名开头
- 一般都需要将对象本身传出去
- 比如tableView的代理方法,当用户点击加号,就知道用户点击的是哪一行的加号
- 必须要遵守基协议
- 声明一个代理属性
- id<协议>delegate
- 设置代理
- 遵守协议
- 实现协议方法
- 当控件内部发生了一些事情,就可以调用代理的代理方法,通知代理
- 调用代理的代理方法,通知代理【self.delegate 代理方法:self】
- 如果是optional需要判断一下有没有这个代理方法
iso监听某些事件的方法
-
通知
- NSNotificationCenter | NSNotification
- 任何对象之间都可以传递消息
- 使用范围:
- 一个对象可以发通知给多个对象
- 一个对象可以接受多个对象发出的通知
- 要求:必须保证通知的名字在发出和监听的时候是一致的
-
KVO
- 仅仅是能监听对象属性的改变(灵活度不如通知和代理)
-
代理
- 使用范围
- 一个对象只能设置一个代理(假设一个对象只能设置一个代理属性)—— 设计角度
- 一个对象能成为多个对象的代理(控制器)
- 使用范围
-
如何选择?
- 一般来说,只想监听某个对象属性值的改变,就用KVO
- 通知和代理,一般来说,会选择代理,代理相对于通知要规范一些,因为通知有一个要求,发出通知和监听通知的名字要一致,假设发布名字发生改变,就监听不到了。
- 通知的好处:简单易用,代理相对比较麻烦
- 代理比通知规范
- 能用代理就用代理
- 同时通知多个对象的时候,就不能用代理了,只能使用通知