NSNotificationCenter是同步的?還是異步的?

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notificationAction:)
                                                 name:kNotificationName object:nil];
    
}
 
- (void) notificationAction: (NSNotification*)notification
{
    NSLog(@"sleep 之前");
    
    sleep(10);
    
    NSLog(@"sleep 之后");
    
}
 
- (void)buttonActon:(id)sender{
    [[NSNotificationCenter defaultCenter] postNotificationName:kNotificationName object:nil];
    
    NSLog(@"buttonActon:");
}

// 打印順序如下:
sleep 之前
sleep 之后
buttonActon:

結論:
(1)NSNotificationCenter 默認是同步的,在通知發出之后,觀察者要處理完通知事件之后,通知的發送者才能繼續往下執行。
(2)NSNotificationCenter 會一直等待所有的 觀察者 都收到并且處理了通知才會返回到 通知發送者。
(3)如果想NSNotificationCenter不阻塞當前線程,可以根據實際情況,考慮將通知的發送放在子線程,或者將通知的處理方法放在子線程調用。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Swift1> Swift和OC的區別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,132評論 1 32
  • 引用自多線程編程指南應用程序里面多個線程的存在引發了多個執行線程安全訪問資源的潛在問題。兩個線程同時修改同一資源有...
    Mitchell閱讀 2,019評論 1 7
  • 從三月份找實習到現在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發崗...
    時芥藍閱讀 42,340評論 11 349
  • NSNotificationCenter對象(通知中心)提供了在程序中廣播消息的機制,它實質上就是一個通知分發表。...
    9de75b652cd9閱讀 762評論 0 1
  • 第5章 多線程編程 5.1 線程基礎 5.1.1 如何創建線程 在java要創建線程,一般有==兩種方式==:1)...
    AndroidMaster閱讀 1,808評論 0 11