在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];
总结以上是内存溢出为你收集整理的IOS 监听(NSNotification)的优缺点和项目实践应用全部内容,希望文章能够帮你解决IOS 监听(NSNotification)的优缺点和项目实践应用所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)