通知機制
-
通知中心(NSNotificationCenter)
- 每一個應(yīng)用程序都有一個通知中心對象,專門負責(zé)協(xié)調(diào)不同對象之間的消息通信
- 任何一個對象都可以向通知中心發(fā)布通知棋蚌,描述自己在做什么防泵,其他感興趣的對象可以申請在某個特定通知發(fā)布時(或者某個特定的對象發(fā)布通知時)收到這個通知
- 特點:無障礙跨界面
-
發(fā)布通知
- 通知:NSNotification對象
- [[NSNotificationCenter defaultCenter]postNotification:]
- 每次發(fā)通知都會接收到
- [[NSNotificationCenter defaultCenter]postNotificationName:object:userInfo:]這個方法不需要先創(chuàng)建在再發(fā)布
- 一個完整的通知包含三個屬性
- name:通知名稱
- object:通知發(fā)布者
- userInfo: 通知發(fā)布者傳遞給通知接受者的信息內(nèi)容
-
監(jiān)聽通知
- [NSNotificationCenter defaultCenter]addObserver:誰想監(jiān)聽 selector:方法 name:監(jiān)聽什么通知 object:誰發(fā)布的通知
-
移除通知
- [[NSNotificationCenter defaultCenter]removeObsever:1 name:2 object:3]
- 1不再監(jiān)聽2發(fā)布的通知3
- [[NSNotificationCenter defaultCenter]removeObsever:1]
- [[NSNotificationCenter defaultCenter]removeObsever:1 name:2 object:3]
通知原則:有添加就有移除,如果不移除通知,就會有野指針錯誤斗搞,但是ios9之后,不會報錯慷妙,但是建議還是要遵循這個原則
- 當監(jiān)聽對象銷毀之前僻焚,移除通知
- 可以寫在dealloc方法里面移除,或者在}之前
- `模擬:騰訊|新浪 `
- 張三軍事膝擂,李四娛樂虑啤,王五都關(guān)心
- 新建人類
- 新建公司類
- 控制器中創(chuàng)建兩家公司,創(chuàng)建三個人
- `監(jiān)聽通知`
- [NSNotificationCenter defaultCenter]addObserver:誰想監(jiān)聽 selector:方法 name:監(jiān)聽什么通知 object:誰發(fā)布的通知
- 如果object = nil 只要是軍事新聞不管誰發(fā)的都會接受
- 如果name = nil,只要是騰訊發(fā)的架馋,不管什么類型的通知都接受
- 如果name ,object 都傳nil,表示所有通知都接受
- 只要騰訊發(fā)布了軍事新聞就會調(diào)用李四的方法
- 在Person類中提供一個方法
- getNews:(NSNotification *)note
- 細節(jié):監(jiān)聽通知為什么寫在創(chuàng)建通知對象的前面狞山?
- 注意:`監(jiān)聽通知一定要在發(fā)布通知前面`
- `創(chuàng)建通知對象`
- NSNotification notificationWithName:object:userInfo:
- `發(fā)布通知`
- [[NSNotificationCenter defaultCenter]postNotification:]
- 每次發(fā)通知都會接收到
- [[NSNotificationCenter defaultCenter]postNotificationName:object:userInfo:]這個方法不需要先創(chuàng)建在再發(fā)布
- 匿名通知 : object = nil,通知不知道誰發(fā)的
- `移除通知`
- [[NSNotificationCenter defaultCenter]removeObsever:1 name:2 object:3]
- 1不再監(jiān)聽2發(fā)布的通知3
- [[NSNotificationCenter defaultCenter]removeObsever:1]
- 1不再監(jiān)聽任何通知
- 通知原則:有添加就有移除,如果不移除通知叉寂,就會有野指針錯誤铣墨,但是ios9之后,不會報錯办绝,但是建議還是要遵循這個原則
- 當監(jiān)聽對象銷毀之前伊约,移除通知
- 可以在dealloc方法里面移除,或者}之前
-
UIDevice通知
- 單例對象孕蝉,代表著設(shè)備屡律,通過它可以獲取一些設(shè)備相關(guān)的信息,比如電池電量
- 作用:系統(tǒng)適配
- [UIDevice currentDevice].systemVersion可以拿到當前系統(tǒng)的版本
- double verson = [UIDevice currentDevice].systemVersion.doubleValue
- if(version >=9.0){}else if (version >= 8.0){}
- UIDeviceOrientationDidChangeNotification
- UIDeviceBatteryStateDidChangeNotification
- UIDeviceBatteryLevelDidChangeNotification
-
鍵盤通知
- 監(jiān)聽鍵盤彈出通知降淮,移動textField輸入位置
- 當鍵盤彈出或者隱藏的時候會發(fā)一些通知超埋,可以監(jiān)聽這些通知搏讶,做一些事情
-
通知作用
- 傳遞事件
- 傳遞數(shù)據(jù)