NSNotification是同步还是异步?和delegate相比有啥区别,效率呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSNotification是同步还是异步?和delegate相比有啥区别,效率呢?相关的知识,希望对你有一定的参考价值。

参考技术A 1、NSNotification是同步还是异步?
默认情况下,创建的NSNotification是同步的,
发布通知

接收通知

执行结果

通过这里的时间间隔可以看出,在抛出通知以后,观察者在通知事件处理完成以后(这里我们休眠3秒),抛出者才会往下继续执行,也就是说这个过程默认是同步的;当发送通知时,通知中心会一直等待所有的observer都收到并且处理了通知才会返回到poster;

那能不能当成异步处理呢?
两种方法:
第一种方法,发布通知的时候搞在子线程中,当然了,接收方法触发的也是在子线程中

第二种方法,接收方法在子线程中执行

2、NSNotification和delegate相比有什么区别
1>NSNotification是一对多的关系,不需要两个之间建立什么联系,类似于一种广播似的发送消息,接受者只要是声明了接收信息,就能接收。消息接受者通过keyPath的方式指定需要接受的消息类型,通常在对象初始化完成以后声明开始接受消息,在对象被销毁前注销接受消息。
NSNotification发布一个广播的通知。(面向所有的类),当有谁需要这个通知的话,就注册成为它的会员(会员存在Array里)。notification通过管理array来实现事件的操作。
当哪个 会员 什么时候不需要再成为会员的时候,就需要注销(在dealloc里释放)
2>delegate是一对一的关系,首先两个要建立联系,才能进行相应的传值回调动作。

3、效率哪个更高
效率肯定是delegate比NSNotification高。

以上是关于NSNotification是同步还是异步?和delegate相比有啥区别,效率呢?的主要内容,如果未能解决你的问题,请参考以下文章

对由 NSTimer 异步发送的 NSNotification 进行单元测试

setState是同步的还是异步的

react的setState是异步还是同步

Django是同步的还是异步的?

Javascript 默认是同步(阻塞)还是异步(非阻塞)

事件是异步还是同步?