// 通知中心的第一種使用?
1 必須先監(jiān)聽
// addObserver 添加觀察者
//? selector? 只要監(jiān)聽到通知就會(huì)調(diào)用這個(gè)方法
// name 通知的名稱
// object 誰發(fā)出的通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(Notification) name:@"note" object:nil];
// name 通知的名稱
// object 誰發(fā)出的通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"note" object:nil];
// 通知的方法
- (void)Notification
{
NSLog(@"收到通知");
}
// 通知中心的第二種使用
// name 通知的名稱
// object 誰發(fā)出的通知
// queue 決定block在哪個(gè)線程中調(diào)用 傳nil 在發(fā)布的線程中執(zhí)行? [NSOperationQueue mainQueue]; 一般在主線程中調(diào)用
// 注意的是這個(gè)通知中心 沒有添加觀察者 移除的時(shí)候移除返回值
_object =? [[NSNotificationCenter defaultCenter] addObserverForName:@"note" object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) {
//? 這里的block 在監(jiān)聽在通知時(shí)候 調(diào)用
[NSOperationQueue mainQueue];
}];
- (void)Notification
{
NSLog(@"收到通知");
}
-(void)dealloc
{
// 移除通知?
[[NSNotificationCenter defaultCenter] removeObserver:_object];
}
?通知中心使用注意點(diǎn)?
通知中心的監(jiān)聽方法 ?在哪個(gè)線程執(zhí)行 是由發(fā)出通知所在的線程決定的 ?所以在 監(jiān)聽的事件中 更新UI時(shí)要回到主線程中 避免監(jiān)聽事件在子線程中執(zhí)行了?
dispatch_async(dispatch_get_main_queue(), ^{
// 更新UI
});
// 全局異步隊(duì)列
dispatch_sync(dispatch_get_global_queue(0, 0), ^{
});
// 主隊(duì)列
dispatch_async(dispatch_get_main_queue(), ^{
// 更新UI
});