NSNotification 同步、异步

NSNotification 发通知的操作是同步的,并且通知处理是在发通知的那个线程

如下面的操作:

+ (void)postNotificationAsy {
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
        [[NSThread currentThread] setName:@"test_notifi_thread"];
        NSLog(@"begin post notification....");
        [[NSNotificationCenter defaultCenter] postNotificationName:testNotification object:nil];
        NSLog(@"post notificaition finished...");
    });

}

// 这个通知回调方法是在线程 test_notifi_thread 处理的
- (void)handleNotification:(NSNotification *)notification {
    NSLog(@"handle thread name: %@",[NSThread currentThread].name);
    NSLog(@"handle Notification...");
}

打印结果:
 ThreadTest[5103:76211] begin post notification....
 ThreadTest[5238:83489] handle thread name: test_notifi_thread
 ThreadTest[5103:76211] handle Notification...
 ThreadTest[5103:76211] post notificaition finished...

1.在test_nofifi_thread线程中发一条通知 (异步通知)
2.postNotificationName这个方法没有立即返回,说明是同步的,它会执行完对应的回调的方法
3.通知回调处理是在发通知的线程(test_nofifi_thread)里处理的
4.postNotificationName这个方法实现,应该是在调用线程里去遍历所有的的NotificationName为Key的Observer列表,然后Observer调用对应注册的通知处理方法。

你可能感兴趣的:(NSNotification 同步、异步)