iOS中的消息传递

2017-06-08  本文已影响0人  Coulson_Wang

一、通知

1. 监听通知

调用addObserver:selector:name:object:方法来监听通知。
参数的含义:

2. 创建通知对象

调用NSNotification类的类方法notificationWithName: object: userInfo:来创建通知
参数的含义:

3.发布通知
4.移除通知:

二、KVO

  1. 监听变化
    调用 addObserver:forKeyPath:options:context:方法增加监听
  2. 监听到变化后
    实现 observerValueForKeyPath:ofObject:change:context方法处理键值变化
  3. 移除监听
    调用removeObserver:forKeyPath:方法移除监听
  4. KVO的缺点:

三、代理

  1. 定义一份协议
  1. 声明一个代理属性
    格式:@property(weak, nonatomic) id<协议名> delegate;

  2. 设置代理。代理类需要遵循协议

  3. 在类的实现中调用代理方法,在调用时最好先通过responseToSelector:方法进行内省,避免运行时错误

  4. 在代理类中实现代理协议的方法

</br>

总结:

三种方式的区别

通知:一个对象可以发送通知给多个对象,一个对象也可以监听多个对象发生的通知;
KVO:只能监听属性的改变
代理:一个对象只能设置一个代理,一个对象能成为多个对象的代理。

取舍与选择:

代理比通知更规范(通知中的通知名称需要知道内部实现才能进行使用),能使用代理时最好使用代理。
如果只需要监听属性的改变,可以使用KVO

上一篇 下一篇

猜你喜欢

热点阅读