iOS設計模式2 - 觀察者模式_通知機制

一激捏、解析

1. NSNotificationCenter

NSnotificationCenter是一種典型的有調度中心的觀察者模式實現(xiàn)方式胎挎。以NSNotificationCenter為中心席噩,觀察者往Center中注冊對某個主題對象的變化感興趣月匣,主題對象通過NSNotificationCenter進行變化廣播承边。這種模型就是文章開始發(fā)布訂閱報紙在OC中的一種類似實現(xiàn)掖蛤。所有的觀察和監(jiān)聽行為都向同一個中心注冊,所有對象的變化也都通過同一個中心向外廣播刁标。

通知機制.png

特點:“一對多”

2. 通知機制

在通知機制中對某個通知感興趣的所有對象都可以成為接收者颠通。
首先,這些對象需要對通知中心(NSNotificationCenter)發(fā)出addObserver:selector:name:object:消息進行注冊,在投送對象投
送通知給通知中心時,通知中心就會把通知廣播給注冊過的接收者。所有的接收者都不知道通知是誰投送的,更不關心它的細節(jié)膀懈。投送對象與接收者是一對多的關系顿锰。接收者如果對通知不再關注,會給通知中心發(fā)出
removeObserver:name:object:消息解除注冊,以后不再接收通知。

通知機制圖.png

二吏砂、實現(xiàn)

1. 觀察者所在類

1)注冊觀察者:(一般在viewDidLoad方法中實現(xiàn))

  //name為通知名撵儿,作為區(qū)分
  [[NSNotificationCenter defaultCenter]  addObserver:self
                                            selector:@selector(handleAction:)
                                                name:@"test"
                                              object:nil];
]
  • observer:監(jiān)聽器,即誰要接收這個通知
  • Selector:收到通知后狐血,回調監(jiān)聽器的這個方法淀歇,并且把通知對象當做參數(shù)傳入
  • Name:通知的名稱。如果為nil匈织,那么無論通知的名稱是什么浪默,監(jiān)聽器都能收到這個通知
  • Object:通知發(fā)布者。如果Object和Name都為nil缀匕,監(jiān)聽器都收到所有的通知

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:發(fā)送某一類型通知纳决,廣播改變。

//傳遞的數(shù)據(jù)
NSDictionary *dataDict = [NSDictionary dictionaryWithObject:self.testTextField.text forKey:@"testKey"];
//發(fā)出通知(廣播)
[[NSNotificationCenter defaultCenter] postNotificationName:@"test"
                                                    object:self
                                                  userInfo:dataDict];

一個通知對象要包含的內容:

    1. (NSString *)name; // 通知的名稱
    1. (id)object; // 發(fā)送對象類型數(shù)據(jù),如果接收者不需要乡小,可設為nil
    1. (NSDictionary
      *)userInfo; // 一些額外的信息(通知發(fā)布者傳遞給通知接收者的信息內容)

補充阔加,可以參考:http://www.th7.cn/Program/IOS/201406/212434.shtml

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市满钟,隨后出現(xiàn)的幾起案子胜榔,更是在濱河造成了極大的恐慌胳喷,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件夭织,死亡現(xiàn)場離奇詭異吭露,居然都是意外死亡,警方通過查閱死者的電腦和手機尊惰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門讲竿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人弄屡,你說我怎么就攤上這事题禀。” “怎么了琢岩?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵投剥,是天一觀的道長师脂。 經常有香客問我担孔,道長,這世上最難降的妖魔是什么吃警? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任糕篇,我火速辦了婚禮,結果婚禮上酌心,老公的妹妹穿的比我還像新娘拌消。我一直安慰自己,他們只是感情好安券,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布墩崩。 她就那樣靜靜地躺著,像睡著了一般侯勉。 火紅的嫁衣襯著肌膚如雪鹦筹。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天址貌,我揣著相機與錄音铐拐,去河邊找鬼。 笑死练对,一個胖子當著我的面吹牛遍蟋,可吹牛的內容都是我干的。 我是一名探鬼主播螟凭,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼虚青,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了螺男?” 一聲冷哼從身側響起棒厘,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤钟些,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后绊谭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體政恍,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年达传,在試婚紗的時候發(fā)現(xiàn)自己被綠了篙耗。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡宪赶,死狀恐怖宗弯,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情搂妻,我是刑警寧澤蒙保,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站欲主,受9級特大地震影響邓厕,放射性物質發(fā)生泄漏。R本人自食惡果不足惜扁瓢,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一详恼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧引几,春花似錦昧互、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至楣铁,卻和暖如春玖雁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背民褂。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工茄菊, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赊堪。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓面殖,卻偏偏與公主長得像,于是被迫代替她去往敵國和親哭廉。 傳聞我的和親對象是個殘疾皇子脊僚,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容

  • 觀察者模式也叫發(fā)布/訂閱模式,是軟件設計模式中的一種。在這種模式中辽幌,一個目標物件管理所有相依于它的觀察者物件增淹,并且...
    蝸牛非牛閱讀 1,500評論 1 6
  • 通知機制 基本概念 通知中心(NSNotificationCenter) 每一個應用程序都有一個通知中心(NSNo...
    iOS_Cqlee閱讀 547評論 1 7
  • KVO與通知都可實現(xiàn)觀察者模式。 一乌企、通知簡介 NSNotificationCenter是一個消息通知機制虑润,類似廣...
    f1e583c455bf閱讀 909評論 0 1
  • 【前言介紹】 iOS的一種設計模式,觀察者Observer模式(也叫發(fā)布/訂閱加酵,即Publich/Subscrib...
    啊左閱讀 6,003評論 18 49
  • 每一個應用程序都有一個通知中心(NSNotificationCenter)實例拳喻,專門負責協(xié)助不同對象之間的消息...
    藍心兒的藍色之旅閱讀 309評論 0 0