iOS設計模式2 - 觀察者模式_通知機制
一、解析
1. NSNotificationCenter
NSnotificationCenter是一種典型的有排程中心的觀察者模式實現方式。以NSNotificationCenter為中心,觀察者往Center中註冊對某個主題物件的變化感興趣,主題物件通過NSNotificationCenter進行變化廣播。這種模型就是文章開始釋出訂閱報紙在OC中的一種類似實現。所有的觀察和監聽行為都向同一個中心註冊,所有物件的變化也都通過同一個中心向外廣播。
特點:“一對多”
2. 通知機制
在通知機制中對某個通知感興趣的所有物件都可以成為接收者。
首先,這些物件需要對通知中心(NSNotificationCenter)發出addObserver:selector:name:object:訊息進行註冊,在投送物件投
送通知給通知中心時,通知中心就會把通知廣播給註冊過的接收者。所有的接收者都不知道通知是誰投送的,更不關心它的細節。投送物件與接收者是一對多的關係。接收者如果對通知不再關注,會給通知中心發出
removeObserver:name:object:訊息解除註冊,以後不再接收通知。
二、實現
1. 觀察者所在類
1)註冊觀察者:(一般在viewDidLoad方法中實現)
//name為通知名,作為區分
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleAction:)
name:@"test"
object:nil];
]
- observer:監聽器,即誰要接收這個通知
- Selector:收到通知後,回撥監聽器的這個方法,並且把通知物件當做引數傳入
- Name:通知的名稱。如果為nil,那麼無論通知的名稱是什麼,監聽器都能收到這個通知
- Object:通知釋出者。如果Object和Name都為nil,監聽器都收到所有的通知
2)接收廣播後的處理
-(void)handleAction:(NSNotification*)notification
{
//獲取userinfo
NSDictionary *theData = [notification userInfo];
//[notification object] 可獲取post的object物件
//作出反應
if (theData !=nil) {
NSString *data =
[theData objectForKey:@"testKey"];
NSLog(@"FlipsideViewController App Terminate Date: %@", data);
}
}
3)解除註冊(一般在dealloc方法中解除=註冊)
-(void)dealloc{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
2. 被觀察的物件
通過postNotificationName:object:userInfo:傳送某一型別通知,廣播改變。
//傳遞的資料
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:self.testTextField.text forKey:@"testKey"];
//發出通知(廣播)
[[NSNotificationCenter defaultCenter] postNotificationName:@"test"
object:self
userInfo:dataDict];
一個通知物件要包含的內容:
- (NSString *)name; // 通知的名稱
- (id)object; // 傳送物件型別資料,如果接收者不需要,可設為nil
- (NSDictionary
*)userInfo; // 一些額外的資訊(通知釋出者傳遞給通知接收者的資訊內容)
- (NSDictionary
相關文章
- iOS設計模式之觀察者模式iOS設計模式
- iOS 設計模式_觀察者_KVOiOS設計模式
- 設計模式----觀察者模式設計模式
- 設計模式 —— 觀察者模式設計模式
- 設計模式(觀察者模式)設計模式
- 設計模式——觀察者模式設計模式
- 設計模式-觀察者模式設計模式
- 設計模式_觀察者模式設計模式
- 【設計模式】觀察者模式設計模式
- 設計模式(十六)觀察者模式設計模式
- PHP設計模式-觀察者模式PHP設計模式
- 設計模式(9) 觀察者模式設計模式
- 設計模式-觀察者模式上設計模式
- 設計模式-觀察者模式下設計模式
- Java設計模式-觀察者模式Java設計模式
- 設計模式解析:觀察者模式設計模式
- JS設計模式(觀察者模式)JS設計模式
- 設計模式之觀察者模式設計模式
- 設計模式 #6 (觀察者模式)設計模式
- 設計模式之-觀察者模式設計模式
- 設計模式之【觀察者模式】設計模式
- javascript設計模式觀察者模式JavaScript設計模式
- 設計模式:觀察者模式(observer)設計模式Server
- Head First 設計模式(2)---觀察者(Observer)模式設計模式Server
- iOS設計模式之三:介面卡模式和觀察者模式iOS設計模式
- 觀察者模式-將訊息通知給觀察者模式
- 設計模式-單例模式,觀察者模式設計模式單例
- PHP 設計模式之觀察者模式PHP設計模式
- PHP設計模式之觀察者模式PHP設計模式
- Go 設計模式之觀察者模式Go設計模式
- 設計模式之觀察者模式(一)設計模式
- JavaScript設計模式之觀察者模式JavaScript設計模式
- 簡說設計模式——觀察者模式設計模式
- PHP 設計模式之——觀察者模式PHP設計模式
- 設計模式中的觀察者模式設計模式
- 設計模式實戰 - 觀察者模式設計模式
- golang設計模式之觀察者模式Golang設計模式
- PHP設計模式(5)—— 觀察者模式PHP設計模式