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
网友评论