簡介
通知中心(NSNotificationCenter), 是IOS程序內(nèi)部的一種消息廣播機制, 通過它可以完成不同對象之間的通信焰轻。如果我們想把消息從A傳遞到B, 那么通知中心的兩端就是發(fā)送者A和接收者(也就是觀察者)B, 兩者通過通知中心就可以完成通信。
通知中心的3個屬性
@property (readonly, copy) NSNotificationName name;
//通知的唯一標(biāo)識蜜另,用于辨別是哪個通知。
@property (nullable, readonly, retain) id object;
//指定接收消息的對象滚躯,為nil時消息傳遞給所有監(jiān)聽該消息的對象狰腌,否則只有指定對象可以接收消息。
@property (nullable, readonly, copy) NSDictionary *userInfo;
//傳遞給監(jiān)聽者的消息內(nèi)容并扇,字典類型。
通知的使用
1. 監(jiān)聽通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aAction:) name:@"name" object:nil];
// 如果發(fā)送的通知指定了object對象抡诞,那么只有添加觀察者時設(shè)置的object對象與其一樣的觀察才能接收到通知穷蛹,但是接收通知如果將這個參數(shù)設(shè)置為了nil,則會接收一切通知昼汗。
2. 發(fā)送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"name" object:nil userInfo:@{@"key":@"value"}];
// 觀察者的SEL函數(shù)指針可以有一個參數(shù)肴熏,參數(shù)就是發(fā)送的消息對象(NSNotification)本身,可以通過這個參數(shù)取到消息對象的userInfo顷窒,實現(xiàn)傳值蛙吏。
3. 通知方法的實現(xiàn)
- (void)aAction:(NSNotification *)not
{
NSLog(@"%@", not.userInfo);
}
4. 最后需要移除通知
[[NSNotificationCenter defaultCenter] removeObserver:self];
這樣一個簡單的通知就寫完,這種通知是我們自己聲明鞋吉,自己監(jiān)聽的鸦做,iOS內(nèi)部還有一些系統(tǒng)的通知,我們只需要監(jiān)聽就可以了谓着,舉個栗子:
//增加監(jiān)聽泼诱,當(dāng)鍵彈出時收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillShow:)
name:UIKeyboardWillShowNotification
object:nil];
//增加監(jiān)聽,當(dāng)鍵退出時收出消息
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillHide:)
name:UIKeyboardWillHideNotification
object:nil];
//然后實現(xiàn)方法就可以了
- (void)keyboardWillShow:(NSNotification *)aNotification
{
}
- (void)keyboardWillHide:(NSNotification *)aNotification
{
}
最后附上iOS中常用的系統(tǒng)通知
// 鍵盤
UIKeyboardWillShowNotification 鍵盤即將顯示
UIKeyboardDidShowNotification 鍵盤顯示完畢
UIKeyboardWillHideNotification 鍵盤即將隱藏
UIKeyboardDidHideNotification 鍵盤隱藏完畢
UIKeyboardWillChangeFrameNotification 鍵盤的位置尺寸即將發(fā)生改變
UIKeyboardDidChangeFrameNotification 鍵盤的位置尺寸改變完畢
// 設(shè)備
UIDeviceOrientationDidChangeNotification 設(shè)備旋轉(zhuǎn)
UIDeviceBatteryStateDidChangeNotification 電池狀態(tài)改變
UIDeviceBatteryLevelDidChangeNotification 電池電量改變
UIDeviceProximityStateDidChangeNotification 近距離傳感器(比如設(shè)備貼近了使用者的臉部)
另外還有許多赊锚,想拍照治筒,視頻,滑動等舷蒲,只需要看系統(tǒng)包都能找到(不行還有瀏覽器呢)
結(jié)語:限于水平耸袜,本文只寫了一些基本用法和注意事項,如果文中存在錯誤請指出牲平,我會及時修改堤框。