通知

使用通知注意事项:

(1)接收通知前必须先移除掉通知,避免只发一次通知时,却出现两次或多次的响应事件;

(2)使用通知的类在被释放时,必须要移除通知;

(1)添加通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(respondsToNotification:) name:@"test0" object:_obj0];

_obj0是创建的一个实例,这里暂时不讨论object参数的用法。Observer即为响应者无需多说;selector即为一个响应通知的方法,需要SEL类型;name是一个标识,通知中心主要是通过它来实现消息的精确分发(当然object也有定位作用)。

(2)发送通知

//便利方法

[[NSNotificationCenter defaultCenter] postNotificationName:@"test0" object:_obj0 userInfo:@{@"key":@"_obj0"}];

//使用NSNotification

NSNotification *notification = [[NSNotification alloc] initWithName:@"test0" object:_obj2 userInfo:@{@"key":@"_obj2"}];

[[NSNotificationCenter defaultCenter] postNotification:notification];

发送通知和添加通知对应,需要name、object参数,这里多了一个userInfo,该参数可以把你需要携带的数据发送给该通知的响应者。

其实我们可以很轻易的想到,便利发送通知方法不过是对于使用NSNotification发送通知的一个语法糖,NSNotification才是消息体

(3)移除通知

//移除该响应者的全部通知

[[NSNotificationCenter defaultCenter] removeObserver:self];

//移除该响应者 name==@"test0" 的全部通知

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"test0" object:nil];

//移除该响应者 name==@"test0" 且 object==_obj0 的全部通知

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"test0" object:_obj0];

4、是否需要移除通知?

for (int i = 0; i < 3; i++) {

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(respondsToNotification:) name:@"test0" object:nil];

}

//该代码导致的结果是,响应通知回调会走三次。

可以看到,虽然我们在主线程中注册了通知的观察者,但在全局队列中post的Notification,并不是在主线程处理的。所以,这时候就需要注意,如果我们想在回调中处理与UI相关的操作,需要确保是在主线程中执行回调。

https://juejin.im/entry/5a8fe5c551882518c0797ebe

最后是把这个放在主线程中执行 解决了通知明明移除还多次发送的问题

不行…还是不行 最后在viewWillAppear viewWillDisappear 添加 移除 解决问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 概述 在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知...
    莫离_焱阅读 6,691评论 1 8
  • 前序 通知在我看来,有好处也有坏处。用好了那就是翻云复海,上天入地,无所不能。什么传值、传递动作就是一句话:天气飘...
    沉默学飞翔阅读 10,529评论 30 38
  • 通知中心(NSNotificationCenter) 通知(NSNotification) 一个完整的通知一般包含...
    JonesCxy阅读 564评论 0 1
  • 如果在一个类中想要执行另一个类中的方法可以使用通知1.创建一个通知对象:使用notificationWithNam...
    wangjianjun0730阅读 800评论 0 0
  • iOS 提供了一种 “同步的” 消息通知机制NSNotificationCenter,观察者只要向消息中心注册, ...
    MasterChen阅读 2,308评论 4 16

友情链接更多精彩内容