美文网首页面试必看iOS 坑的集中营iOS学习
NSNotification是同步还是异步?和delegate相

NSNotification是同步还是异步?和delegate相

作者: 踩坑小分队 | 来源:发表于2016-10-14 17:15 被阅读884次

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

[[NSNotificationCenter defaultCenter] postNotificationName:@"clickBtn" object:nil];

接收通知

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(click111) name:@"clickBtn" object:nil];
- (void)click111
{
        sleep(3);
        NSLog(@"通知执行完毕");
}

执行结果

2016-10-14 16:57:50.595 InterviewDemo[8682:2263688] 开始发布通知
2016-10-14 16:57:53.597 InterviewDemo[8682:2263688] 通知执行完毕
2016-10-14 16:57:53.598 InterviewDemo[8682:2263688] 执行完毕了通知

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

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

 dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"clickBtn" object:nil];
    });

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

- (void)click111
{
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
    
        sleep(3);
        NSLog(@"通知执行完毕");
    });
}

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

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

相关文章

网友评论

  • lawrenceWeiii:“效率肯定是delegate比NSNotification高。”
    这句话的根据是什么?
    踩坑小分队:个人理解:
    delegate对于回调者来说,目的比较直接,并且是一对一的,相对于NSNotification的一对多较轻量级。
    而对于NSNotification,不关心接受者是否接受,不关心接受情况,并且是一对多的,份量上重很多。

    按内存来比较的话:NSNotification常驻内存,delegate只是调用时寻找回调地址
  • f6a980f463d2:离谱。
    踩坑小分队:愿闻其详,共同进步。
    f6a980f463d2:在iOS水平不够的情况下强行装逼就是刷流氓。
  • Thebloodelves:建议按作用比较,比如你前两个比较是传值,但是如果要界面实时刷新则用通知;
    按内存来比较的话:NSNotification常驻内存,delegate只是调用时寻找回调地址
    踩坑小分队:@Thebloodelves OK,长知识了

本文标题:NSNotification是同步还是异步?和delegate相

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