NotificationCenter 通知中心

2021-03-18  本文已影响0人  远辰jt

经测试发现
1,对于默认的通知中心 NotificationCenter.default, 没有移除监听通知的情况下, 对象销毁后再发通知的话 不会触发方法,也不会崩溃。
2,对于自己创建的通知中心NotificationCenter(),在iOS9 一下没有移除监听通知的情况下, 对象销毁后再发通知的话 ,会崩溃。 以上的话不会崩溃
3, 无论是哪种通知中心, 都不会对监听是传入的对象强引用
4, 无论是哪种通知中心, 不要重复添加通知, 因为即使同一个对象 同一个通知添加多次通知后, 通知发送的时候 会重复调用方法, 最好保证只监听一次。(我感觉这是苹果的bug, 重复添加通知应该覆盖之前的)
5,对于在子线程发送通知的情况, 调用注册selector的时候也是在同一个异步线程调用。
6,发送通知这个动作有同步和异步之分。。 默认情况下(用NotificationCenter发)和 利用NotificationQueue发送样式为now的通知的时候都是同步的。利用NotificationQueue发送样式为whenIdle 或者 asap的时候是异步的。
7,经打印发现, 不同线程的通知中心是一个,但是通知队列是不同的。 并且是跟随线程的生命周期的,对于在主线程上, 利用通知队列发送异步或者同步的通知都可以收到。但是在子线程上, 由于子线程的生命周期短暂,在执行完任务后就会销毁, 所以子线程上的通知队列生命周期同样短暂,只有发送同步通知的时候才会成功发送,其他的时候都是对象先销毁了,自然接收不到通知。
8,想要在子线程发送异步通知的话 一个实现思路就是保持子线程不被销毁, 在子线程的runloop里面加一个port。但是有一个缺点就是由于子线程一直存在 所以里面的局部变量啥的没有释放。
9,对于用通知队列进行通知合并 只有在发送异步通知的时候才有意义, 发送同步的时候。

上一篇下一篇

猜你喜欢

热点阅读