国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS中的通知機制

2020-07-26 03:22:49
字體:
來源:轉載
供稿:網友

網上經常說iOS的通知機制是使用了觀察者模式,里面有兩個角色,其一是poster(發送者),另一個是observer(接受信息的訂閱者)。但我認為重要的角色是通知中心,它是整個通知機制的核心,有poster發送者發送的消息必定要到達通知中心,再由通知中心根據這個消息被哪些observer訂閱者訂閱過,就把消息往那些訂閱者去分發。整體可以與現在的電子郵件結構作類比的。

但要額外說明一下,iOS的通知雖然也叫Notification通知,但是與Android中的通知是不一樣的,在Android中的通知是一種消息推送的形式,而在iOS中肯定也有消息推送,這就是推送機制那部分的內容。說會這個通知機制的其實就是原本在學習C#時的事件,只不過這里的事件是對于整個系統的全局事件,任何一方往系統的這個全局事件去注冊綁定了方法,到事件被觸發的時候就能夠被執行。

整個通知的操作流程,我們只需要把poster和observer設置好就可以了

對于Poster的操作比較簡單,他只需要往通知中心推通知就可以了,采用以下的代碼

[[NSNotificationCenter defaultCenter] postNotificationName:@”PostOne” object:@”This is posterone”];

或者

[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@”PostOne” object:@”This is posterone”]];

NotificationWithName: object: 方法還有一個重載就是有userInfo: 參數,它是NSDictionary的字典類型,就是用于傳遞用戶參數。

  對于Observer則相對沒Poster那么簡單,在C#中進行事件注冊綁定的時候也發現,觸發事件的只需要像調用方法那樣子調用就可以了,但是注冊那一方則需要為事件綁定方法,又要定義方法,而在iOS的通知機制中,需要注冊,回調處理(就是事件中的方法定義),用完了還要去刪除。

注冊

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@”PostOne” object: nil]; 

這里的參數是跟postNotificationName: object:對應的。注冊了哪個通知name參數就填上對對應的值

回調處理

-(void) callBack1(NSNotification*)notification{notification.name://通知的名稱notification.object;//發送通知時的objectnotification.userInfo//發送通知時的userInfo}

刪除

在使用消息完畢(就是不再對接收到的消息作處理的)之后,需要進行刪除操作

[[NSNotificationCenter defaultCenter]removeObserver: self];//刪除所有注冊過的通知[[NSNotificationCenter defaultCenter]removeObserver:self name:@”PostOne“ object:nil];//刪除名稱為”PostOne“的通知

補充:

ios中觀察者模式與通知機制,及KVO

在ios開發中,通知機制和KVO都是依靠觀察者模式得以實現。通知機制與KVO的不同之處在于,前者是一個中心對象為所有觀察者提供變更通知,后者是被觀察對象直接向觀察者發送通知。

以下關注觀察者模式與通知機制實現:

1、觀察者模式中Subject對象,又可稱目標對象,是通知的發布者,又是被觀察者。提供注冊和取消注冊的方法;Observer對象,又可稱為觀察者,是通知的訂閱者。Observer類中,相識Subject,以達到能夠接收通知。

2、ios中的通知機制,是Cocoa Touch框架為開發者開發的類,讓開發者不必自己寫觀察者模式,用到它便能實現。對于我而言,通知機制的所有使用,都集中到一個類中。而導致我用通知機制去理解觀察者模式時,迷糊于Subject和Observer,誰是通知的發送者,因為類中集結了觀察者和發送者。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 嘉荫县| 大渡口区| 银川市| 札达县| 潜江市| 淅川县| 咸丰县| 都匀市| 南丹县| 西青区| 武城县| 塘沽区| 略阳县| 综艺| 永城市| 五莲县| 申扎县| 峨眉山市| 石河子市| 石景山区| 收藏| 新邵县| 同心县| 尤溪县| 隆林| 慈利县| 余庆县| 蒙阴县| 东兰县| 西畴县| 阿荣旗| 闸北区| 六枝特区| 龙游县| 竹溪县| 宁阳县| 江孜县| 伊通| 全椒县| 聂荣县| 青河县|