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调用对应注册的通知处理方法。