答案 : 事件的执行不是依据通知的注册/监听,而是依据通知的触发/发送, 结论: 触发/发送通知在哪条线程, 那么事件就在哪条线程执行
A界面(注册/监听通知)
NSLog(@"注册,监听%@",[NSThread currentThread]);
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(event:) name:@"tongzhi" object:nil];
- (void)event:(NSNotification *)sender
{
NSLog(@"所在线程: %@, 接受到数据: %@",[NSThread currentThread],sender.userInfo[@"name"]);
}
B界面(触发/发送通知)
//方式一
[[NSNotificationCenter defaultCenter]postNotificationName:@"tongzhi" object:self userInfo:@{@"name":@"在主线程触发"}];
// 方式二
dispatch_async(dispatch_get_global_queue(0, 0), ^{
[[NSNotificationCenter defaultCenter]postNotificationName:@"tongzhi" object:self userInfo:@{@"name":@"在分线程触发"}];
});
输出:
2017-04-13 15:20:15.423 LZX[1936:128062] 注册,监听<NSThread: 0x60000006f180>{number = 1, name = main}
2017-04-13 15:20:18.126 LZX[1936:128062] 所在线程: <NSThread: 0x60000006f180>{number = 1, name = main}, 接受到数据: 在主线程触发
2017-04-13 15:20:18.126 LZX[1936:128099] 所在线程: <NSThread: 0x60800006fe80>{number = 3, name = (null)}, 接受到数据: 在分线程触发