蜜臂av日日欢夜夜爽一区_成人一区二区三区在线观看 _日韩国产欧美三级_成人福利视频网站_石原莉奈在线亚洲二区_国产一区二区三区四区五区美女_国产一区二区三区av电影 _91麻豆福利精品推荐_日韩精品1区2区3区_93久久精品日日躁夜夜躁欧美

十年專注于品牌網站建設 十余年專注于網站建設_小程序開發_APP開發,低調、敢創新、有情懷!
南昌百恒網絡微信公眾號 掃一掃關注
小程序
tel-icon全國服務熱線:400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號
掃一掃打開百恒網絡微信小程序

百恒網絡

南昌百恒網絡

ios設計模式之觀察者模式

百恒網絡 2017-04-05 5880

上周我們跟隨南昌APP開發制作公司--百恒網絡一起學習了ios設計模式之常用模式和委托模式,今天我們繼續來學習ios設計模式之觀察者模式。

觀察者(Observer)模式也叫發布/訂閱(Publish/Subscribe)模式,是 MVC( 模型-視圖-控制器)模式的重要組成部分。

3.1 問題提出

天氣一直是英國人喜歡討論的話題,而最近幾年天氣也成為中國人非常關注的話題。我會根據天氣預報決定是坐地鐵還是開車上班,也會根據天氣預報決定明天穿哪件衣服。于是在移動公司為我的手機定制了天氣預報短信通知服務,它的工作模型如圖所示。

定制天氣預報短信通知服務

定制天氣預報短信通知服務

每天氣象局將天氣預報信息投送給移動運營商,移動運營商的短信中心負責把天氣預報發送給定制過這項服務的手機。

在軟件系統中,一個對象狀態的改變也會連帶影響其他很多對象的狀態發生改變。能夠實現這一需求的設計方案有很多,但能夠做到復用性強且對象之間匿名通信的,觀察者模式是其中最為適合的一個。

3.2 實現原理

觀察者模式的類圖如圖所示。 它有4個角色,具體如下所示。

抽象主題( Subject )。抽象主題是一個協議,它是一個觀察者集合容器,定義了添加觀察者( attach )方法、移除觀察者( detach )方法和為所有觀察者發送通知的方法( notifyObserver )。

抽象觀察者( Observer )。抽象觀察者也是一個協議,它有一個更新( update )方法。

具體觀察者( ConcreteObserver )。 Observer 協議的具體實現。

具體主題( ConcreteSubject )。 Subject 協議的具體實現。

引入 Subject 和 Observer 這兩個協議后,不僅提高了系統的可復用性,還降低了耦合度。觀察者模式還可以有其他變形,若要深入了解,可以參考GoF。

觀察者模式的類圖(上圖為Swift版,下圖為Objective-C版)

觀察者模式的類圖(上圖為Swift版,下圖為Objective-C版)

3.3 通知機制和 KVO 機制

在Cocoa Touch框架中,觀察者模式的具體應用有兩個——通知(notification)機制和KVO(Key-ValueObserving)機制,下面簡要介紹這兩種機制。

1. 通知機制

通知機制與委托機制不同的是,前者是“一對多”的對象之間的通信,后者是“一對一”的對象之間的通信。

說明:在iOS中,通知一詞多次出現過,歸納一下主要有廣播通知(broadcast notification)、本地通知(localnotification)和推送通知(push notification),本節介紹的是廣播通知。事實上,除了名字相似,廣播通知與其他兩個通知完全不同:廣播通知是Cocoa Touch框架中實現觀察者模式的一種機制,它可以在一個應用內部的多個對象之間發送消息;本地通知和推送通知中的“通知”是給用戶一種“提示”,它的“提示”方式有警告對話框、發出聲音、振動和在應用圖標上顯示數字等。 在計劃時間達到時,本地通知由本地iOS發出。推送通知由第三方程序發送給蘋果的遠程服務器,再由遠程服務器推送給iOS的特定應用。

如圖所示,在通知機制中對某個通知感興趣的所有對象都可以成為接收者。首先,這些對象需要向通知中心( NSNotificationCenter )發出addObserver:selector:name:object: 消息進行注冊,在投送對象投送通知給通知中心時,通知中心就會把通知廣播給注冊過的接收者。所有的接收者都不知道通知是誰投送的,更不關心它的細節。

投送對象與接收者是一對多的關系。接收者如果對通知不再關注,會給通知中心發出 removeObserver:name:object:消息解除注冊,以后不再接收通知。

通知機制圖

通知機制圖

下面我們介紹一下通知機制的使用過程。這里我們將7.1節的模態視圖案例重新設計一下,圖8-15所示,在注冊視圖點擊Save按鈕返回到登錄視圖時,把數據回傳給登錄視圖。

模態視圖案例

模態視圖案例

登錄視圖控制器 ViewController 作為通知的接收者,注冊視圖控制器 RegisterViewController 作為通知投送對象,如圖所示。

通知機制圖

通知機制圖

在ViewController視圖控制器中,注冊通知接收者的代碼如下:

在ViewController視圖控制器中,注冊通知接收者的代碼

NSNotificationCenter 是單例模式,創建和獲得共享實例的方法是 defaultCenter , NSNotificationCenter 的addObserver:selector:name:object:方法能夠 注冊通知。當接收到 AppWillTerminateNotification 通知時,就會調用handleTerminate: 方法。

解除注冊代碼也類似,通過 NSNotificationCenter 發出 removeObserver 消息實現。對于視圖控制器,也可以在didReceiveMemoryWarning 方法中發出消息,具體代碼如下:

在didReceiveMemoryWarning 方法中發出消息,具體代碼

ViewController中接收通知的方法是 registerCompletion: ,其代碼如下:

這個方法可以接收一個 NSNotification類型 的參數。NSNotification 類中有3個重要的屬性: name 、 object 和userInfo ,這3個屬性與通知中心投送方法中的參數有一定的對應關系,如圖所示。

NSNotification 類和通知中心中投送方法參數的關系

NSNotification 類和通知中心中投送方法參數的關系

其中 name 是通知的名字, object 是投送通知時傳遞過來的對象, userInfo 是投送通知時定義的字典對象,可借助于該參數傳遞數據。

在 RegisterViewController 視圖控制器中,投送通知的代碼如下:

在 RegisterViewController 視圖控制器中,投送通知的代碼

NSNotificationCenter 的投送方法除了代碼中所示外,還有另外兩個重載方法:

NSNotificationCenter 的投送方法

它們可以投送不帶 userInfo 參數的通知,我們可以根據需要進行選擇。還要注意的是, object 參數未必是 self對象,我們可以根據需要傳遞一個對象,如果接收者不需要,可以將其設為 nil 。

當我們運行代碼,從注冊視圖進入登錄視圖后,會在日志中輸出回傳回來的 username 參數。

Cocoa和Cocoa Touch框架都提供一些通知,由系統自動投送。現在修改 ViewController 類添加系統通知:

修改 ViewController 類添加系統通知

修改 ViewController 類添加系統通知

在 viewDidLoad 方法中,第①~②行代碼是系統注冊通知 UIApplicationDidEnterBackgroundNotification (進入到后臺通知)和:

UIApplicationWillEnterForegroundNotification (回到前臺通知)。第③~④行代碼是接收通知后的事件處理。

提示 在iOS設備上可以按Home鍵進入后臺,快速按兩次Home鍵可以打開最近使用應用列表,點擊應用可以使該應用重新回到前臺。另外,在Xcode模擬器中沒有Home鍵,點擊Home鍵的操作可以通過組合鍵command+shift+H完成。

除了應用生命周期的不同階段有不同的通知外,很多控件也會在某些事件發生時投送通知,例如UITextField控件。在編輯過程的不同階段,UITextField控件會分別發出如下通知:UITextFieldTextDidBeginEditingNotification 、 UITextFieldTextDidChangeNotification 和 UITextFieldTextDidEndEditingNotification 。

2. KVO機制

KVO不像通知機制那樣通過一個通知中心通知所有觀察者對象,而是在對象屬性變化時通知會被直接發送給觀察者對象。圖為KVO機制解析圖。

可以看到,屬性發生變化的對象需要發出消息 addObserver:forKeyPath:options:context: 給注冊觀察者,使觀察者關注它的某個屬性的變化。當對象屬性變化時,觀察者就會接收到通知,觀察者需要重寫方法 observeValueForKeyPath:ofObject:change:context: 以響應屬性的變化。

KVO機制圖

KVO機制圖

下面我們來看一個實際的案例。我們使用KVO機制來監視應用程序的狀態變化。應用程序委托對象

AppDelegate 的 appStatus 屬性是要觀察的屬性。 AppDelegate 的代碼如下:

AppDelegate的代碼

上述代碼中第①行的 appStatus 屬性是需要觀察的屬性,在Swift版中它的定義上必須要加 dynamic,以表示該屬性是在運行時動態派發的。第②行代碼用于定義觀察者AppStatusObserver , AppStatusObserver 是我們的自定義類,它負責觀察 appStatus 屬性的變化。第③行代碼用于創建 AppStatusObserver 對象。

第④行代碼是關鍵,addObserver:forKeyPath:options:context: 語句告訴觀察者( AppStatusObserver )開始觀察 AppDelegate 的 appStatus 屬性變化,其中參數 addObserver 是觀察者對象; forKeyPath 是被關注對象的屬性;options 是為屬性變化設置的選項,本例中 New 和 Old 表示把屬性新舊兩個值都傳遞給觀察者,這些值是NSKeyValueObservingOptions 類型的成員; context 參數是上下文內容,它的類型是C語言形式的任何指針類型,

Swift版表示為 UnsafeMutablePointer ,Objective-C版本表示為 void * 。

觀察者 AppStatusObserver 的代碼如下:

觀察者 AppStatusObserver 的代碼

因為 NSObject 類實現了 NSKeyValueObserving 協議,所以只需聲明 AppStatusObserver 繼承了 NSObject 類,而無需實現 NSKeyValueObserving 協議。

observeValueForKeyPath:ofObject:change:context: 方法的 observeValueForKeyPath 參數是被關注的屬性。

ofObject 是被關注的對象, change 是字典類型,包含了屬性變化的內容,這些內容與注冊時屬性變化設置的選項( options 參數)有關。 context 是注冊時傳遞的上下文內容。

第一次運行程序到界面時,會有兩個狀態的變化,日志結果如下:

第一次運行程序到界面時,會有兩個狀態的變化

如果將應用退到后臺,然后再回到前臺,日志結果如下:

如果將應用退到后臺,然后再回到前臺

關于應用程序狀態變化相關的內容,這里不再解釋。

本文僅限內部技術人員學習交流,不得作于其他商業用途.希望此文對廣大技人員有所幫助。文章出自:南昌APP開發制作公司--百恒網絡:http://m.51yjwy.com

400-680-9298,0791-88117053
掃一掃關注百恒網絡微信公眾號
掃一掃打開百恒網絡小程序

歡迎您的光顧,我們將竭誠為您服務×

售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售前咨詢 售前咨詢
 
售后服務 售后服務
 
售后服務 售后服務
 
備案專線 備案專線
 
×
蜜臂av日日欢夜夜爽一区_成人一区二区三区在线观看 _日韩国产欧美三级_成人福利视频网站_石原莉奈在线亚洲二区_国产一区二区三区四区五区美女_国产一区二区三区av电影 _91麻豆福利精品推荐_日韩精品1区2区3区_93久久精品日日躁夜夜躁欧美
国产一区不卡视频| 国产一区欧美二区| 男女视频一区二区| 狠狠色丁香九九婷婷综合五月| 黑人精品欧美一区二区蜜桃| 粉嫩久久99精品久久久久久夜| 99国产欧美久久久精品| 久久精品国产亚洲a| 丰满白嫩尤物一区二区| 日韩电影免费在线看| 国产精品一区二区在线观看不卡| 不卡的看片网站| 精品一区二区在线免费观看| www.一区二区| 韩国成人福利片在线播放| 成人综合激情网| 麻豆久久久久久久| gogo大胆日本视频一区| 国内欧美视频一区二区| 91亚洲精品一区二区乱码| 韩国一区二区在线观看| 天堂久久久久va久久久久| 国产一区二区三区精品视频 | 91丨九色丨蝌蚪丨老版| 国产一区二区在线影院| 日韩在线观看一区二区| 成人免费观看男女羞羞视频| 黑人精品欧美一区二区蜜桃| 日本亚洲天堂网| 99久久久国产精品免费蜜臀| 国产美女在线观看一区| 麻豆国产欧美日韩综合精品二区 | 看国产成人h片视频| youjizz国产精品| 国产99久久久国产精品| 韩国午夜理伦三级不卡影院| 蜜桃精品视频在线| 丝袜美腿亚洲色图| 99久久99久久精品免费观看 | 国产成人超碰人人澡人人澡| 狠狠色狠狠色综合| 麻豆国产精品一区二区三区 | 日韩在线播放一区二区| 成人美女视频在线看| 国产精品资源网| 国产美女主播视频一区| 国产自产2019最新不卡| 精品一区二区三区免费视频| 日本aⅴ亚洲精品中文乱码| 日韩精品亚洲专区| 91美女福利视频| 91免费看片在线观看| 99re66热这里只有精品3直播| 成人午夜伦理影院| 成人精品国产免费网站| 成人黄色网址在线观看| 不卡电影免费在线播放一区| av高清久久久| 日本亚洲三级在线| 日本不卡一二三区黄网| 蜜桃精品视频在线| 精品无人码麻豆乱码1区2区| 韩国av一区二区三区在线观看| 韩国av一区二区| 国产在线精品一区二区不卡了 | 91女人视频在线观看| 91日韩一区二区三区| 爽好久久久欧美精品| 日本欧美一区二区三区| 捆绑紧缚一区二区三区视频| 韩国v欧美v日本v亚洲v| 懂色av噜噜一区二区三区av| 99视频国产精品| 秋霞av亚洲一区二区三| 久久69国产一区二区蜜臀| 国产一区二区在线电影| 成人精品免费视频| 全国精品久久少妇| 国产黑丝在线一区二区三区| av中文一区二区三区| 日本网站在线观看一区二区三区| 久久99热国产| 粉嫩久久99精品久久久久久夜| 97精品久久久久中文字幕| 秋霞午夜鲁丝一区二区老狼| 国产精品一卡二| 97精品久久久久中文字幕| 精一区二区三区| av午夜一区麻豆| 久久福利资源站| 99亚偷拍自图区亚洲| 久久精品国内一区二区三区| 成人性生交大片免费看视频在线| 日本午夜精品一区二区三区电影| 国产高清久久久| 日韩激情一区二区| 国产精品 欧美精品| 青青草国产精品97视觉盛宴| 国产成人精品一区二区三区四区 | 91免费国产视频网站| 狠狠色丁香婷综合久久| 91在线观看高清| 国产精品一区二区在线观看不卡 | 成人中文字幕在线| 久久99精品视频| 99久久精品99国产精品| 国产精品综合在线视频| 美女久久久精品| av爱爱亚洲一区| 国产福利一区二区| 久久99精品久久久| 天使萌一区二区三区免费观看| 国产成人在线影院| 精品一区二区三区免费观看| 日韩精品一卡二卡三卡四卡无卡| 成人av影院在线| 国产精品中文字幕日韩精品| 美女精品一区二区| 免费精品视频最新在线| 91麻豆国产福利精品| www.色综合.com| 懂色av噜噜一区二区三区av| 国内久久精品视频| 久久精品av麻豆的观看方式| 日韩1区2区3区| 丝袜美腿亚洲一区| 日韩精品欧美成人高清一区二区| av在线播放成人| 成人黄色大片在线观看| 成人国产免费视频| 成人午夜在线播放| 国产 日韩 欧美大片| 国产成人精品综合在线观看| 国产福利一区二区三区视频| 国产激情偷乱视频一区二区三区 | 国产麻豆视频一区二区| 国内成人免费视频| 国内精品久久久久影院一蜜桃| 青青草伊人久久| 麻豆精品国产传媒mv男同| 日本怡春院一区二区| 免费成人性网站| 麻豆免费看一区二区三区| 久久精品久久99精品久久| 美国欧美日韩国产在线播放| 老司机精品视频一区二区三区| 免费成人在线观看| 国产专区欧美精品| 福利一区在线观看| 99国产欧美久久久精品| 青青草97国产精品免费观看| 精品一区二区三区香蕉蜜桃| 国产精品一区在线| 不卡高清视频专区| 青青草原综合久久大伊人精品优势 | 奇米色777欧美一区二区| 蜜桃久久久久久| 国产酒店精品激情| 99视频精品免费视频| 欧美a一区二区| 国产在线乱码一区二区三区| 成人性视频免费网站| 日韩精品成人一区二区在线| 极品美女销魂一区二区三区免费| 国产麻豆视频一区| 91论坛在线播放| 激情图片小说一区| 成人免费av在线| 另类调教123区| 成人免费黄色大片| 免费的成人av| 成人精品鲁一区一区二区| 日韩成人av影视| 国产一区二区不卡| 日韩中文字幕麻豆| 国产精品77777竹菊影视小说| 91一区在线观看| 国产精品99久| 麻豆成人久久精品二区三区小说| 粉嫩在线一区二区三区视频| 美女视频黄久久| 成人免费电影视频| 国产一区欧美一区| 秋霞电影网一区二区| 成人av动漫在线| 黄页视频在线91| 日韩精品一级中文字幕精品视频免费观看| 国产91高潮流白浆在线麻豆| 97久久超碰精品国产| 国产精品亚洲а∨天堂免在线| 丝袜美腿高跟呻吟高潮一区| 成人午夜av在线| 国产一区二区看久久| 日韩二区三区四区| 99久久伊人精品| 国产成人综合自拍| 久久er精品视频| 男人的天堂久久精品| 91蜜桃免费观看视频| 成人福利视频网站| 粉嫩欧美一区二区三区高清影视 | 日韩精品91亚洲二区在线观看| 国产成人啪免费观看软件| 久久国产福利国产秒拍| 日韩福利视频网| 91蜜桃网址入口| 99久久99久久免费精品蜜臀| 懂色av一区二区夜夜嗨| 国产精品一二三| 国产一区二区三区在线观看免费视频| 免费一级片91| 免费成人av在线播放| 日本欧美一区二区在线观看| 日韩激情av在线| 日本不卡一区二区三区高清视频| 91网页版在线| 日韩国产成人精品| 日韩电影在线看| 日本中文一区二区三区| 免费在线看一区| 蜜臀a∨国产成人精品| 免费美女久久99| 精品在线免费观看| 精品一区二区三区免费播放| 久久99这里只有精品| 黄色日韩网站视频| 国产精品中文字幕日韩精品 | 韩日欧美一区二区三区| 国产揄拍国内精品对白| 国产美女视频一区| 成人小视频免费观看| 91原创在线视频| 国产一区日韩二区欧美三区| 狠狠色综合色综合网络| 国产成人日日夜夜| 99久久99久久综合| 日本不卡一二三区黄网| 国内国产精品久久| 国产凹凸在线观看一区二区| 高清shemale亚洲人妖| 97久久超碰精品国产| 麻豆精品国产传媒mv男同| 国产精品中文字幕欧美| 99国内精品久久| 精品一区二区免费视频| 成人黄色在线看| 麻豆成人91精品二区三区| 国产精品一区二区在线观看不卡 | 麻豆视频一区二区| 国产高清视频一区| 日韩电影在线观看一区| 九一九一国产精品| 99久久精品国产精品久久| 看电视剧不卡顿的网站| 成人午夜短视频| 蜜桃av噜噜一区二区三区小说| 国产一区二区三区蝌蚪| 视频一区在线播放| 国产成人综合亚洲91猫咪| 日本大胆欧美人术艺术动态| 国产成人av在线影院| 日本亚洲视频在线| 成人小视频免费观看| 久久国产成人午夜av影院| www.日韩大片| 国产传媒一区在线| 久久成人综合网| 日韩综合在线视频| av在线不卡电影| 国产高清无密码一区二区三区| 免费成人在线视频观看| 成人少妇影院yyyy| 国内一区二区在线| 日本亚洲三级在线| 成人福利电影精品一区二区在线观看| 国产在线精品免费| 99久久精品免费| 国产剧情av麻豆香蕉精品| 日本91福利区| av网站一区二区三区| 99精品欧美一区二区三区综合在线| 韩国av一区二区三区| 97aⅴ精品视频一二三区| 国产在线播放一区| 日本不卡123| 99久久夜色精品国产网站| 成人美女在线观看| 国产剧情一区二区三区| 奇米精品一区二区三区四区| 99精品欧美一区二区三区小说| 国产乱码精品一区二区三区五月婷| 日日夜夜精品免费视频| 91在线视频在线| 国产不卡视频一区二区三区| 久久国产剧场电影| 久久99精品国产91久久来源| 99精品久久99久久久久| 国产福利不卡视频| 国产激情视频一区二区三区欧美 | 免费在线观看日韩欧美| 97久久超碰国产精品| 成人一区二区三区| 国产69精品久久久久毛片| 国产在线精品视频| 国产成人午夜精品影院观看视频| 麻豆国产精品视频| 人人精品人人爱| 久久99精品网久久| 麻豆国产精品视频| 麻豆精品一区二区综合av| 极品少妇一区二区三区精品视频| 美女精品自拍一二三四| av一区二区三区| 奇米精品一区二区三区在线观看一 | 国产suv精品一区二区三区| 国产主播一区二区| 国产成人免费在线| 高清不卡一区二区在线| 国产在线精品国自产拍免费| 国产精品影视在线观看| 国产乱妇无码大片在线观看| 久久国产夜色精品鲁鲁99| 久久综合综合久久综合| 六月丁香婷婷久久| 国产成人综合在线观看| 成人深夜在线观看| 99久久婷婷国产综合精品| 蜜臀久久久久久久| 激情国产一区二区| av中文字幕在线不卡| 日韩精品亚洲专区| 九九国产精品视频| av不卡在线播放| 日本欧美韩国一区三区| 奇米在线7777在线精品| 国产成人精品亚洲777人妖| 成人亚洲精品久久久久软件| 日韩不卡免费视频| 国产在线日韩欧美| 成人中文字幕在线| 免费不卡在线观看| 成人av在线资源网| 六月丁香综合在线视频| 国产麻豆精品在线| 日韩电影在线免费| 国产一区 二区 三区一级| 成人18精品视频| 精品无人区卡一卡二卡三乱码免费卡 | 日韩av一区二区三区四区| 久久99国产精品免费| 99re热视频精品| 国产综合久久久久久鬼色| 99re这里都是精品| 精品一区二区在线观看| 国产91综合一区在线观看| 青青草原综合久久大伊人精品优势| 国产综合久久久久影院| 欧美aa在线视频| 懂色av一区二区夜夜嗨| 蜜桃av噜噜一区二区三区小说| eeuss影院一区二区三区| 久久国内精品自在自线400部| heyzo一本久久综合| 久久91精品久久久久久秒播| 成人免费毛片嘿嘿连载视频| 国产乱码精品一品二品| 三级在线观看一区二区| 国产一区二区三区观看| 日韩精品午夜视频| 丁香另类激情小说| 国产精品中文欧美| 久久国产精品一区二区| 日韩 欧美一区二区三区| 不卡区在线中文字幕| 日本va欧美va欧美va精品| 天堂成人国产精品一区| 粉嫩av一区二区三区| 国产二区国产一区在线观看| 另类的小说在线视频另类成人小视频在线| 国产精品一级片在线观看| 奇米精品一区二区三区在线观看| 成人毛片在线观看| www.欧美精品一二区| 国产福利视频一区二区三区| 国产精品一区在线| 久久99国产精品尤物| 免费成人在线网站| 日韩专区中文字幕一区二区| 日韩电影一区二区三区四区| 91在线观看一区二区| 99re视频这里只有精品| 不卡在线观看av| 91免费看片在线观看| 视频在线观看一区| 91蜜桃视频在线| 成人国产精品免费| 手机精品视频在线观看| 日韩精品久久久久久| 蜜臀va亚洲va欧美va天堂| 日本视频一区二区|