iOS 通知原理

1.[NSNotificationCenter defaultCenter]方式发送通知:


image.png

可以看出,使用最常用的NSNotificationCenter发送通知,这是在同一线程里发送的,并且是同步的执行方式。

2.使用通知队列NSNotificationQueue发送通知
可以看出使用NSPostWhenIdle按照异步方式执行了通知


image.png
image.png

而使用NSPostNow的方式,是同步执行的


image.png

每一个线程都维护一个通知队列,开辟新的线程发送通知,如果是同步发送的通知,即为同步执行,如果是异步发送的通知:
1.使用通知中心方式,默认在当前线程创建一个通知队列,并且发送时机为NSPostNow,同步执行


image.png

2.使用通知队列方式,会发现并没有成功发送,这是因为在NSPostWhenIdle时候,线程结束的时候,通知队列已经被释放了,所以没法成功执行通知方法(使用NSPostNow时候,仍然同步执行)


image.png

3.使用NSPort方式,开启runloop 以保证线程不会在空闲时间结束掉,通知对象被释放掉,从而能执行通知方法


image.png

4.消息合并
没有进行消息合并的时候,会多次执行通知方法(NSPostWhenIdle时机,NSPostNow不存在消息合并)


image.png

消息合并后,就不会多次执行了


image.png
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。