iOS 监听(NSNotification)的优缺点和项目实践应用

在IOS应用开发中有一个”Notification Center“的概念。它是一个单例对象,允许当事件发生时通知一些对象。它允许我们在低程度耦合的情况下,满足控制器与一个任意的对象进行通信的目的。这种模式的基本特征是为了让其他的对象能够接收到在该controller中发生某种事件而产生的消息,controller用一个key(通知名称)。这样对于controller来说是匿名的,其他的使用同样的key来注册了该通知的对象(即观察者)能够对通知的事件作出反应。

       优势:

        1.不需要编写多少代码,实现比较简单;

        2.对于一个发出的通知,多个对象能够做出反应,即1对多的方式实现简单

        3.controller能够传递context对象(dictionary),context对象携带了关于发送通知的自定义的信息

       缺点:

        1.在编译期不会检查通知是否能够被观察者正确的处理; 

        2.在释放注册的对象时,需要在通知中心取消注册;

        3.在调试的时候应用的工作以及控制过程难跟踪;

        4.需要第三方对喜爱那个来管理controller与观察者对象之间的联系;

        5.controller和观察者需要提前知道通知名称、UserInfo dictionary keys。如果这些没有在工作区间定义,那么会出现不同步的情况;

        6.通知发出后,controller不能从观察者获得任何的反馈信息。

1、.注册通知:addObserver:selector:name:object,并实现触发通知后要实现的操作

   [[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(reloadJpushData:)name:@"JPUSHNOTIFICATION"object:nil];

- (void)reloadJpushData: (NSNotification *)sender

[self getData];

}

2、发送通知:postNotificationName:object(就在触发通知的方法里写)

[[NSNotificationCenterdefaultCenter]postNotificationName:@"JPUSHNOTIFICATION"object:nil];

3、移除通知:removeObserver:和removeObserver:name:object:

其中,removeObserver:是删除通知中心保存的调度表一个观察者的所有入口,而removeObserver:name:object:是删除匹配了通知中心保存的调度表中观察者的一个入口。我以前发现不移除通知也不会报错,但是想想不用的东西进行移除,然后用的时候到再进行注册,这是一种良好的编程方式,有始有终,不要给程序留下潜在的问题。在dealloc方法下实现

这个比较简单,直接调用该方法就行。例如:

移除单个通知:[[NSNotificationCenter defaultCenter] removeObserver:self name:@"JPUSHNOTIFICATION" object:self];

移除当前所有通知:[[NSNotificationCenterdefaultCenter]removeObserver:self];




  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值