Objective-C(十九、通知-訊息發送模式之一)——iOS開發基礎,objective-cios

來源:互聯網
上載者:User

Objective-C(十九、通知-訊息發送模式之一)——iOS開發基礎,objective-cios

結合之前的學習筆記以及參考《Objective-C編程全解(第三版)》,對Objective-C知識點進行梳理總結。知識點一直在變,只是作為參考,以蘋果官方文檔為準~

十九、通知-訊息發送模式之一

1、幾個基本概念
(1)通知:在物件導向的程式中,有時需要將發生的時間通知給多個對象的訊息發送模式;
(2)通知中樞:期望取得通知的對象預先向通知中樞註冊期望取得的通知;
(3)發送:某對象向通知中樞發送訊息發送請求,只有註冊過該通知單額對象,都可獲得通知中樞推送的訊息;
(4)觀察者:訊息發送目標,在通知中樞註冊的對象(可以有多個);
(5)多播:某個對象向特定的多個對象發送訊息,通知就是多播的一種

2、通知對象:向通知中樞發送訊息,必要的資訊會在NSNotification類執行個體中集中後發送給通知中樞

+ (instancetype)notificationWithName:(NSString *)aName object:(id)anObject;+ (instancetype)notificationWithName:(NSString *)aName                              object:(id)anObject                            userInfo:(NSDictionary *)aUserInfo;

變數說明:
aName:識別通知的短文本,向NSNotification介面發送如下訊息可取出名字
anObject:和通知一起發送的附帶資訊的對象,多為發送通知的對象,也可為nil
userInfo:傳遞和通知相關的各種資訊,也可為nil

3、通知中樞NSNotificationCenter
(1)系統有預設的通知中樞,一般不用自己建立。類方法擷取

+ (NSNotificationCenter *)defaultCenter;[NSNotificationCenter defaultCenter];

(2)通知發送

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

指定通知名、對象和使用者字典組建通知,然後發送給接收者的通知中樞

(3)觀察者註冊

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

變數說明:
observer:通知的監聽者
aSelector:收到通知後,會調用observer的此方法。
aName:通知名,當不為nil時,只接受特定對象發送的通知;如果未nil表示沒有設定的發送源
object:通知的寄件者

僅指定特定的多個通知名的通知時,可以將各個通知名分別在通知中樞註冊,或者指定通知名為nil使其發送有關所有通知名的訊息,並在接收後只處理必要的訊息;兩者都為nil則可以接收所有關於發送訊息的通知(這是書上原話)

(4)刪除觀察者的註冊

- (void)removeObserver:(id)observer;- (void)removeObserver:(id)observer                  name:(NSString *)aName                object:(id)anObject;[NSNotificationCenter defaultCenter] removeObserver:obj];

(5)關於記憶體管理
(1)在引用計數管理的情況下,通知中樞在註冊觀察者時,並不retain觀察者及發送元對象。因此釋放這些對象之前,要確實從通知中樞刪除相關設定。否則指向釋放對象的指標會變成null 指標;(即要remove)
(2)在記憶體回收機制時,通知者和發送來源物件會使用弱引用在通知中樞註冊。無論是否註冊,都可能被回收釋放。無需顯式刪除觀察者的註冊;

我個人簡單地理解一下,就是下面幾句白話~

(1)通知中樞有預設的,不要糾結它到底在哪裡,要不要建立,只要抓好發送通知和觀察者就可以;
(2)可以有多個觀察者,註冊便是;
(3)通知對象可以不用創立,直接發送通知就可以了;
(4)觀察者的地方add,remove;
(5)name為nil,可以接受所有發送的通知

這部分的代碼例子,請參考下一篇
“通知模式實現兩個textField傳值及模態視圖——iOS開發”

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.