美文网首页iOS开发之常见问题
iOS 发送通知后多次响应通知方法

iOS 发送通知后多次响应通知方法

作者: S型身材的猪 | 来源:发表于2018-07-20 10:21 被阅读39次

最近在用通知执行某方法的时候,遇到了一个发送一次通知却多次执行通知方法的问题。

问题再现

1、注册通知(添加观察者),这里采用的是block回调方式去执行通知方法,而并非常用的addObserver:selector:name:object:


[[NSNotificationCenter defaultCenter] addObserverForName:URLookExpandCloth object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {

    // 执行你想做的事情

    }];

2、发送通知

    [[NSNotificationCenter defaultCenter] postNotificationName:URLookExpandCloth object:nil];

3、移除通知

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

结果

通知方法的block回调多次执行。

问题原因

这是因为移除通知的地方不对,不应该采用 [[NSNotificationCenter defaultCenter] removeObserver:self];这种方式去移除,因为这里采用的注册通知的方式是block,平常我们注册通知一般是这样做:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(xxxx:) name: URLookExpandCloth object:nil];

这两种注册通知的方法区别在于,block方式有返回值,addObserver没有返回值,block那种方式,返回值实际上就是观察者,我们必须用一个对象去接收这个返回值,然后再移除该返回值(观察者)

解决办法

改的实际上就是上面的第一步和第三步
1、先定义一个全局属性,用于接收注册通知时的返回值

@property (nonatomic, strong) id noty;

2、


_noty =  [[NSNotificationCenter defaultCenter] addObserverForName:URLookExpandCloth object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {

    // 执行你想做的事情

    }];

3、移除通知

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:_noty];
}

相关文章

  • iOS 发送通知后多次响应通知方法

    最近在用通知执行某方法的时候,遇到了一个发送一次通知却多次执行通知方法的问题。 问题再现 1、注册通知(添加观察者...

  • notification的方法响应线程是发送notificati

    notification的方法响应线程取决于发送notification的线程。在子线程发送通知,响应方法的线程就...

  • 2022-05-07获取iOS设备键盘高度和动画弹出时间

    获取iOS设备键盘高度和动画弹出时间 添加监听通知 如代码所示,监听通知,并添加方法 实现通知响应方法 注意获取的...

  • iOS 通知执行多次的问题

    通知注册了多次。相应也会执行多次通知方法 , 相应的,如果你的通知在很短的时间内发送了两次,如果你再通知里传值了。...

  • NSNotificationCenter通知不传递 通知发送多次

    一:通知不传递 今天有个tabbarVC集成自其父VC,然后子父类VC中注册了一个通知, 本以为TabbarVC初...

  • nrf特征值添加

    1.添加写和通知的特征 1.1调用方法 1.3 read响应 1.4 notice发送 1.5 notice响应开...

  • iOS发送通知

    最近看SDWebImage的源码,发现发送通知都是切换到主线程中发送。 以往开发中一直认为在主线程和子线程中发送通...

  • iOS开发-监听

    监听 通知的方法 发送通知 接收通知 注销通知 监听字典里的值 添加观察者 值改变后,调用的方法: 注销观察者 监...

  • iOS推送通知概览

    iOS推送通知概览 一、响应推送(本地通知 和 远程通知 都合适) iOS 10 以前 1. UIUserNoti...

  • UNUserNotificationCenter的基本使用

    引入头文件 注册通知 检查通知权限 发送本地通知 5.发送本地通知一定要实现以下代理方法 通知代理方法

网友评论

    本文标题:iOS 发送通知后多次响应通知方法

    本文链接:https://www.haomeiwen.com/subject/jxsfmftx.html