每個應用中只會有一個通知中心對象:NSNotificationCenter,通過單例方法,創(chuàng)建唯一對象,通知中心對象負責管理所有的通知,包括通知的發(fā)出和管理“通知監(jiān)聽者”。
無論是通知發(fā)布者、還是通知的監(jiān)聽者,都是通過通知中心發(fā)布通知、設置監(jiān)聽者。
發(fā)布通知
方法:
postNotificationName:<#(nonnull NSString *)#> object:<#(nullable id)#> userInfo:<#(nullable NSDictionary *)#>
舉例:
name:通知的名字(監(jiān)聽者就是通過這個名字來判斷是否是自己需要監(jiān)聽的通知)
object:誰發(fā)布的通知
userInfo:通知的內容(這里面包含了通知的內容)
[[NSNotificationCenter defaultCenter] postNotificationName:@“通知的名字” ? object: obj1 userInfo:@{} ];
設置監(jiān)聽者
方法:
addObserver:<#(nonnull id)#> selector:<#(nonnull SEL)#> name:<#(nullable NSString *)#> object:<#(nullable id)#>
舉例:
observer:監(jiān)聽者
selector:監(jiān)聽者需要執(zhí)行的方法
name:通知的名字
object:監(jiān)聽那個對象
[[NSNotificationCenter defaultCenter] addobsever:obj1 selector:(action:) nam:@“通知的名字” object:obj2];
用戶設備的狀態(tài)改變的時候會向通知中心發(fā)出的通知:
鍵盤在狀態(tài)改變的時候會向通知中心發(fā)出的通知:
為了防止在監(jiān)聽者對象銷毀的時候,監(jiān)聽中心仍然有這個監(jiān)聽者,從而當其監(jiān)聽的某個通知發(fā)生的時候,向一個已經銷毀的對象發(fā)送通知,需要在對象銷毀的時候,從通知中心把對應的監(jiān)聽者同時刪除,需要重寫:-(void)dealloc:
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeobsever]; //在對象銷毀的時候同時從通知中心中刪除監(jiān)聽者對象。
}