你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS通知中心

iOS通知中心

編輯:IOS開發綜合

iOS開發中的傳送消息機制總的來說細分為三大類:

本地通知

推送通知

通知中心

三者之間並沒有什麼直接性質的聯系,通知中心是向應用程序中注冊某個觀察者的所有對象廣播消息,通過通知中心可以很好的協調不同對象之間的消息通信。

注意:

每一個應用程序都有且只有一個通知中心(NSNotificationCenter)實例

代理和通知中心都是協調各個對象之間進行消息通信,通知中心在功能上與代理有些類似,二者在選擇時有什麼區分?

代理對應的關系的一對一的關系,而通知是一對多的關系,所以在遇到需要一處改變引起多出
變化的功能上我們最好選擇通知。

例如 :

QQ音樂App上換皮膚效果

讀書軟件改變字體大小效果

在實際開發中合理的使用二者,防止大材小用

一個通知成功實施的必有要三要素

通知發布者

通知中心

通知接收者

一個完整通知包含三個屬性

name:通知的名稱

object:通知的發布者

userInfo:通知者給通知接收者的信息內容

通知接收者向通知中心注冊通知方法

- (void)addObserver:(id)observer selector:(SEL)aSelector name:(nullable NSString *)aName object:(nullable id)anObject;  

observer:監聽器,即誰要接收這個通知

aSelector:收到通知後,回調監聽器的這個方法,並且把通知對象當做參數傳入

 aName:通知的名稱。如果為nil,那麼無論通知的名稱是什麼,監聽器都能收到這個通知 

anObject:通知發布者。如果為anObject和aName都為nil,監聽器都收到所有的通知

通知中心發布通知的三種方法

? - (void)postNotification:(NSNotification *)notification;

? - (void)postNotificationName:(NSString *)aName object: (id)anObject;

? - (void)postNotificationName:(NSString *)aName object:(id)anObject
userInfo:(NSDictionary *)aUserInfo;

通知下的dealloc方法

我們在通知中心注冊完後,通知中心是非常靈敏的,當條件被觸發後就會不斷的向注冊者發送消息,但當我們的注冊者已經被釋放了,這時候就會造成野指針,引發程序崩潰,所以在我們對象被釋放的時候,應該把該對象向通知中心注冊的通知釋放掉。

    - (void)dealloc
    {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
     }

另外取消注冊的方法有兩個:

- (void)removeObserver:(id)observer;

- (void)removeObserver:(id)observer name:(nullable NSString *)aName object:(nullable id)anObject;
//第二個多了一個name的參數可以具體到該對象中某個通知

通知中心的常見的實際應用

1. 設備旋轉

    UIDeviceOrientationDidChangeNotification

2. 鍵盤操作

UIKeyboardWillShowNotification // 鍵盤即將顯示 

UIKeyboardDidShowNotification // 鍵盤顯示完畢 

UIKeyboardWillHideNotification // 鍵盤即將隱藏 

UIKeyboardDidHideNotification // 鍵盤隱藏完畢 

UIKeyboardWillChangeFrameNotification // 鍵盤的位置尺寸即將發生改變 

UIKeyboardDidChangeFrameNotification // 鍵盤的位置尺寸改變完畢 

提醒

通知的正常執行的順序為:接收者在通知中心注冊通知——>通知者在通知中心發布通知———>釋放通知中心的注冊通知。順序出錯將會產生錯誤。

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved