NSNotificationCenter 注册和发送
1、NSNotificationCenter 不管在主线中注册还是在子线程中注册都不受影响
下面2中都能接受到post发送
//子线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(func) name:@"test" object:nil];
});
// 主线程注册
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(func) name:@"test" object:nil];
}
2、主线发送, 子线程发送
主线,子线程都可以发送, 接受方法当前线程和发送的线程相关
//接受 test 的同时方法此时子线程
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSLog(@"B 线程 %ld",[NSThread currentThread].isMainThread);
[[NSNotificationCenter defaultCenter] postNotificationName:@"test"
object:nil userInfo:nil];
});
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(func) name:@"test" object:nil];
- (void) func{
NSLog(@" 当前线程 %ld",[NSThread currentThread].isMainThread);
}
//接受 test 的同时方法此时主线程
//主线中中发送
[[NSNotificationCenter defaultCenter] postNotificationName:@"test"
object:nil userInfo:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(func) name:@"test" object:nil];
- (void) func{
NSLog(@" 当前线程 %ld",[NSThread currentThread].isMainThread);
}