ios觀察者模式

什么是觀察者模式?當A對B的變化感興趣,需要監聽B的狀態變化,就注冊為B的觀察者,當B發生變化時通知A,告知B發生了變化,B根據A的變化作出相應的操作響應。這是一種非常典型的觀察者的用法,我把這種使用方法叫做經典觀察者模式。

從經典的角度看,觀察者模式是一種通知變化的模式,一般認為只在對象發生變化感興趣的場合有用。主題對象知道有觀察者存在,設置會維護觀察者的一個隊列;觀察者模式應當是在面向對象編程中被大規模使用的設計模式之一。

經典觀察者模式
經典觀察者模式被認為是對象的行為模式,又叫發布-訂閱(Publish/Subscribe)模式、模型-視圖(Model/View)模式、源-監聽器(Source/Listener)模式或從屬者(Dependents)模式。經典觀察者模式定義了一種一對多的依賴關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態上發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己或者做出相應的一些動作。在文章一開始舉的例子就是典型觀察者模式的應用。

而在IOS開發中我們可能會接觸到的經典觀察者模式的實現方式,有這么幾種:NSNotificationCenter、KVO、Delegate等

感知通知方式
在經典觀察者模式中,因為觀察者感知到主題對象變化方式的不同,又分為推模型和拉模型兩種方式。主要介紹推模型方式。
主題對象向觀察者推送主題的詳細信息,不管觀察者是否需要,推送的信息通常是主題對象的全部或者部分數據。推模型實現了觀察者和主題對象的解耦,兩者之間沒有過度的依賴關系。但是推模型每次都會以廣播的方式,向所有觀察者發送通知。所有觀察者被動的接受通知。當通知的內容過多時,多個觀察者同時接收,可能會對網絡、內存(有些時候還會涉及IO)有較大影響。
在IOS中典型的推模型實現方式為NSNotificationCenter和KVO。

NSNotificationCenter
NSnotificationCenter是一種典型的有調度中心的觀察者模式實現方式。以NSNotificationCenter為中心,觀察者往Center中注冊對某個主題對象的變化感興趣,主題對象通過NSNotificationCenter進行變化廣播。這種模型就是文章開始發布訂閱報紙在OC中的一種類似實現。所有的觀察和監聽行為都向同一個中心注冊,所有對象的變化也都通過同一個中心向外廣播。

SNotificationCenter就像一個樞紐一樣,處在整個觀察者模式的核心位置,調度著消息在觀察者和監聽者之間傳遞。使用如下:
1、觀察者Observer,一般繼承自NSObject,通過NSNotificationCenter的addObserver:selector:name:object接口來注冊對某一類型通知感興趣.在注冊時候一定要注意,NSNotificationCenter不會對觀察者進行引用計數+1的操作,我們在程序中釋放觀察者的時候,一定要去報從center中將其注銷了。使用方法如下:

//注冊觀察者
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didRotate:) name:XGSDKContainerDidRotate object:nil];
}
//解析消息內容
- (void)didRotate:(UIInterfaceOrientation)fromInterfaceOrientation
{
    if ([XGSDKAuthModel sharedAuthModel].useFullscreen) {
        self.view.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
        _webview.frame = CGRectMake(0, 0, self.view.bounds.size.width, self.view.bounds.size.height);
    }
}
}

最后要記得在dealloc方法中注銷掉,代碼如下:

[[NSNotificationCenter defaultCenter] removeObserver:self];
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 觀察者模式本質上時一種發布-訂閱模型,用以消除具有不同行為的對象之間的耦合,通過這一模式,不同對象可以協同工作,同...
    PlatonsDream閱讀 1,308評論 0 0
  • 一.什么是觀察者模式? 簡單的說就是一個對象擁有多個特征,當某一個特征發生變化時,另外一個對象做出相應的處理和操作...
    LYSNote閱讀 4,225評論 0 5
  • KVO即:Key-Value Observing, 直譯為:基于鍵值的觀察者。 它提供一種機制,當指定的對象的屬性...
    _Lily閱讀 1,017評論 0 1
  • 1 場景問題# 1.1 訂閱報紙的過程## 來考慮實際生活中訂閱報紙的過程,這里簡單總結了一下,訂閱報紙的基本流程...
    七寸知架構閱讀 4,648評論 5 57
  • 前言 什么是觀察者模式?我們先打個比方,這就像你訂報紙。比如你想知道美國最近放生了些新聞,你可能會訂閱一份美國周刊...
    寒橋閱讀 539評論 1 1