iOS通知机制
網(wǎng)上經(jīng)常說iOS的通知機(jī)制是使用了觀察者模式,里面有兩個(gè)角色,其一是poster(發(fā)送者),另一個(gè)是observer(接受信息的訂閱者)。但我認(rèn)為重要的角色是通知中心,它是整個(gè)通知機(jī)制的核心,有poster發(fā)送者發(fā)送的消息必定要到達(dá)通知中心,再由通知中心根據(jù)這個(gè)消息被哪些observer訂閱者訂閱過,就把消息往那些訂閱者去分發(fā)。整體可以與現(xiàn)在的電子郵件結(jié)構(gòu)作類比的。但要額外說明一下,iOS的通知雖然也叫Notification通知,但是與Android中的通知是不一樣的,在Android中的通知是一種消息推送的形式,而在iOS中肯定也有消息推送,這就是推送機(jī)制那部分的內(nèi)容。說會(huì)這個(gè)通知機(jī)制的其實(shí)就是原本在學(xué)習(xí)C#時(shí)的事件,只不過這里的事件是對(duì)于整個(gè)系統(tǒng)的全局事件,任何一方往系統(tǒng)的這個(gè)全局事件去注冊(cè)綁定了方法,到事件被觸發(fā)的時(shí)候就能夠被執(zhí)行。
???????? 整個(gè)通知的操作流程,我們只需要把poster和observer設(shè)置好就可以了
對(duì)于Poster的操作比較簡單,他只需要往通知中心推通知就可以了,采用以下的代碼
[[NSNotificationCenter defaultCenter] postNotificationName:@”PostOne” object:@”This is posterone”];或者
[[NSNotificationCenter defaultCenter] postNotification:[NSNotification notificationWithName:@”PostOne” object:@”This is posterone”]];NotificationWithName: object: 方法還有一個(gè)重載就是有userInfo: 參數(shù),它是NSDictionary的字典類型,就是用于傳遞用戶參數(shù)。
對(duì)于Observer則相對(duì)沒Poster那么簡單,在C#中進(jìn)行事件注冊(cè)綁定的時(shí)候也發(fā)現(xiàn),觸發(fā)事件的只需要像調(diào)用方法那樣子調(diào)用就可以了,但是注冊(cè)那一方則需要為事件綁定方法,又要定義方法,而在iOS的通知機(jī)制中,需要注冊(cè),回調(diào)處理(就是事件中的方法定義),用完了還要去刪除。
注冊(cè)
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(callBack1:) name:@”PostOne” object: nil];這里的參數(shù)是跟postNotificationName: object:對(duì)應(yīng)的。注冊(cè)了哪個(gè)通知name參數(shù)就填上對(duì)對(duì)應(yīng)的值
回調(diào)處理
-(void) callBack1(NSNotification*)notification {notification.name://通知的名稱notification.object;//發(fā)送通知時(shí)的objectnotification.userInfo//發(fā)送通知時(shí)的userInfo }刪除
在使用消息完畢(就是不再對(duì)接收到的消息作處理的)之后,需要進(jìn)行刪除操作
[[NSNotificationCenter defaultCenter]removeObserver: self];//刪除所有注冊(cè)過的通知 [[NSNotificationCenter defaultCenter]removeObserver:self name:@”PostOne“ object:nil];//刪除名稱為”PostOne“的通知。?
轉(zhuǎn)載于:https://www.cnblogs.com/HopeGi/p/4150867.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
- 上一篇: [php]apache虚拟主机配置
- 下一篇: 如何删除git远程分支