iOS設計模式之觀察者模式

來源:互聯網
上載者:User

標籤:ios   設計模式   觀察者模式   

觀察者模式:

定義對象間的一種一對多的依賴關係,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知並被自動更新.


何時使用觀察者模式

(1):對一個對象的改變需要同時改變其他對象,而不知道具體有多少對象有待改變

(2): 一個對象必須通知其他對象,而他又不需要知道其他對象是什麼.

(3): 有兩種抽象類別型相互依賴,將他們封裝在各自的對象中,就可以對他們單獨進行改變和複用. 


在Cocoa Touch架構中使用觀察者模式


1:通知類型:

使用NSNotificationCenter和NSNotification對象實現一對多的互動,允許目標和觀察者以一種耦合的方式通訊,而兩者不需多少瞭解.



例如模型構造一個通知放到通知中樞:


NSNotification *notification = [NSNotification notificationWithName:@“data change”object: self];

NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];

[notificationCenter postNotification: notification];


任何要訂閱這個通知的對象,首先需要為自己進行註冊

[notificationCenter addObserVer : self

selector:@selector(update:)

name:@“data change”

object:subject];


2:鍵 — 值觀察

這一機制基於NSKeyValueObserving非正式協議,Cocoa通過這個協議為所有遵守協議的對象提供了一種自動化的屬性觀察能力.KVC基於有關非正式協議,通過存取對象屬性實現自動觀察




/*      註冊觀察者   */

[_walkeraddObserver:selfforKeyPath:@"age"options:NSKeyValueObservingOptionNewcontext:nil];


/*  KVO function 只要object的keyPath屬性發生變化,就會調用此函數 */


-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context


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

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.