portocol——消息通知的另一种方式

原理

iOS中消息通知是以notificationName来做为标识,发通知时,监听了同一个notificationName的实例会收到通知。

另一种方式是以protocol为标识,发通知时,以protocol+selector,来判断要发送给哪些实例。

做法如下:

  1. 将需要通知的方法定义成protocol,通常是将一组有关联的方法定义在同个protocol中。
  2. 以protocol为key,监听该protocol的实例(可能有多个)为value,组成映射关系,即protocol->observer list。
  3. 防止强引用实例,使用包装对象,用weak属性存储该实例。
  4. 发送通知时,根据protocol+selector,拿到对应的实例,进行调用,同时传递参数。

相比自带的消息通知(notificationName),好处是:

  1. 自带的消息通知,添加同一个notificationName多次,会收到多个通知,而这种方式会去重。
  2. 参数灵活,可直接传递,不用包装成dict和解dict。
  3. 避免移除系统通知的问题
  4. 实例对象以weak修饰,其释放后,会自动置为nil。避免野指针问题。

例子:

定义protocol

@protocol UserProtocol <NSObject>
 
@optional
- (void)logout
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值