通知機制
-
通知中心(NSNotificationCenter)
- 每一個應用程序都有一個通知中心對象,專門負責協(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通知- 單例對象,代表著設備,通過它可以獲取一些設備相關(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ù)