NSNotificationCenter 注意

  • 成对出现
  • 意思很简单,NSNotificationCenter消息的接受线程是基于发送消息的线程的。也就是同步的,因此,有时候,你发送的消息可能不在主线程,而大家都知道操作UI必须在主线程,不然会出现不响应的情况。所以,在你收到消息通知的时候,注意选择你要执行的线程。下面看个示例代码
    //接受消息通知的回调
    - (void)test
    {
        if ([[NSThread currentThread] isMainThread]) {
            NSLog(@"main");
        } else {
            NSLog(@"not main");
        }
        dispatch_async(dispatch_get_main_queue(), ^{
            //do your UI
        });
    
    }
    
    //发送消息的线程
    - (void)sendNotification
    {
        dispatch_queue_t defaultQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(defaultQueue, ^{
            [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:nil];
        });
    }

    文/JamesYu(简书作者)
    原文链接:http://www.jianshu.com/p/a4d519e4e0d5
    著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。

时间: 2024-08-30 10:17:59

NSNotificationCenter 注意的相关文章

NSNotificationCenter消息通信机制介绍(KVO)

NSNotificationCenter消息通信机制介绍(KVO) 作用:NSNotificationCenter是专门供程序中不同类间的消息通信而设置的. 注册通知:即要在什么地方接受消息                [[NSNotificationCenter defaultCenter]  addObserver:self selector:@selector(mytest:) name:@" mytest" object:nil];        参数介绍:         

iOS NSNotificationCenter 移除通知带来的crash

Where to remove observer for NSNotification? 在dealloc方法中移除通知观察者带来crash NSNotificationCenter中的通知消息已经发出,而观察者对象子线程释放,也就是抛送通知消息的线程和观察者对象子线程释放的线程不一致时,存在crash风险,原因是NSNotificationCenter不是线程安全的. 解决办法:尽早移除通知 或者保证释放和抛送通知在同一个线程.

通知中心 - NSNotificationCenter

---恢复内容开始--- NS_ASSUME_NONNULL_BEGIN /**************** Notifications ****************/ // 通知,被发送,被接受. @interface NSNotification : NSObject <NSCopying, NSCoding> 通知的名字 @property (readonly, copy) NSString *name; 具体某一个对象. @property (nullable, readonly,

NSNotificationCenter

dispatch_queue_t defaultQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(defaultQueue, ^{ [[NSNotificationCenter defaultCenter] postNotificationName:@"test" object:nil]; }); 注意释放 [[NSNotificationCenter defaul

第二十六篇:通知中心 NSNotificationCenter

1.通知中心(NSNotificationCenter) ?每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 ?任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 2.通知(NSNotification) >一个完整的通知一般包含3个属性: - (NSString*)name; // 通

通知(NSNotificationCenter)

通知 如今天遇到了一个问题,长按相片,将此相片传到发布说说那个控制器中,不管用push,还是其它方法都无法实现,后来发现一个view添加到了Windows上面了,view添加完毕了就移除了和这个控制器一点关系都没有,这时一个大牛(朋友)用了"通知'这个方法,解决了我的难题,记录下. 1.发送通知 /**   postNotificationName: 是发布的通知的名字,谁要注册通知时,必须和这个名字一致 *   Object :是要传递的对象或参数,如果不传为nil (id类型). **/ [

UI基础之 通知(NSNotificationCenter)

一:通知中心: 每一个应用程序都有一个通知中心(NSNotificationCenter)实例,专门负责协助不同对象之间的消息通信 任何一个对象都可以向通知中心发布通知(NSNotification),描述自己在做什么.其他感兴趣的对象(Observer)可以申请在某个特定通知发布时(或在某个特定的对象发布通知时)收到这个通知 一个完整的通知一般包含3个属性:- (NSString *)name; // 通知的名称- (id)object; // 通知发布者(是谁要发布通知)- (NSDicti

通过NSNotificationCenter 发送通知

问题: 想在APP中发布一条通知,同时允许其他对象接收通知并根据你广播的内容采取相应的行动. 讨论: 通知中心是通知对象的派送中心, 例如,在用户使用 App 时如果键盘显示出来了,iOS 会发送一条通知到你的应用,程序中的任何对象都可以通过将自己添加到通知中心,作为一个观察者,来监听此通知.当对象的的生命周期即将结束时,需要将该对象从通知中心的派送表中移除. 这样,一条通知就相当于一个消息被通知中心广播给它的观察者.通知中心是 NSNotificationCenter 类的一个实例对象.我们通

通知传值(NSNotificationCenter)

通知传值 //流程: 1.注册通知 2.通知中心,发送一条消息通知----------其中name名字千万不要写错了,会出现在3个地方 3.实现通知中心内部的方法,并实现传值 4.第四步,消息发送完,要移除掉 代码如下: #import "FirstViewController.h" #import "SecondViewController.h" #import "UIButton+Create.h" @interface FirstViewC

iOS-开启arc之后 NSNotificationCenter removeObserver 是否需要调用

开启ARC之后,NSNotificationCenter removeObserver 是否需要调用,在何时调用? 今天在stackoverflow上面看到一个问题,arc情况下是否需要调用removeObserver,自己想了想,的确是个问题,就研究了一下. 上代码: - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } 本来想着在arc中dealloc方式是已经遗弃的了,但是事实是它还存