您好,登錄后才能下訂單哦!
怎么解析iPhone中的MVC框架設(shè)計(jì)模式,針對這個(gè)問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
整理自斯坦福大學(xué)iphone開發(fā)公開課,并加入了一些自己的理解。
一、概念
Model = 你的應(yīng)用程序是什么,是用戶界面無關(guān)的部分
Controller = 你的應(yīng)用程序如何將Model顯示給用戶(UI邏輯),是中心是橋梁,連通Model和View
View = Controller的奴才(minion)、小跟班。view一切聽從Controller的指揮,并及時(shí)將重要事件報(bào)告給Controller
二、通信
1、Model和View永遠(yuǎn)不能相互通信,只能通過Controller傳遞。
2、Controller可以直接與Model對話(讀寫調(diào)用Model),Model通過Notification和KVO機(jī)制與Controller間接通信。
3、Controller可以直接與View對話(通過outlet,直接操作View,outlet直接對應(yīng)到View中的控件),View通過action向Controller報(bào)告事件的發(fā)生(如用戶Touch我了)。Controller是View的直接數(shù)據(jù)源(數(shù)據(jù)很可能是Controller從Model中取得并經(jīng)過加工了)。Controller是View的代理(delegate),以同步View與Controller,delegate是一組協(xié)議,表示程序?qū)⒁蛘咭呀?jīng)處于某種狀態(tài)時(shí),來調(diào)整View,以對用戶有個(gè)交代。例如系統(tǒng)內(nèi)存不足了,你是不是相應(yīng)的降低view的質(zhì)量以節(jié)省內(nèi)存。
注:突然冒出個(gè)delegate,讓人不好理解,其實(shí)他不對應(yīng)xcode為我們創(chuàng)建的XXAppDelegate文件,此文件不屬于MVC中的任何一部分,雖然與MVC有聯(lián)系。我發(fā)現(xiàn)蘋果文檔里說A是B的代理的時(shí)候,通常是指A中有B的引用,可以A直接操作B。
三、實(shí)作
建立一個(gè)BtnClick工程系統(tǒng),會(huì)為我們生成以下文件:
BtnClickAppDelegate.h
BtnClickAppDelegate.m
以上兩個(gè)文件定義了實(shí)現(xiàn)UIApplicationDelegate協(xié)議的類BtnClicAppDelegate,UIApplicationDelegate協(xié)議是系統(tǒng)預(yù)定義的協(xié)議,負(fù)責(zé)監(jiān)視應(yīng)用程序的高層行為,處理幾個(gè)關(guān)鍵系統(tǒng)消息,是應(yīng)用程序生命周期為我們預(yù)留的Hook,每個(gè)iphone應(yīng)用程序必不可少的。iphone應(yīng)用程序的生命周期:
BtnClickViewController.h
BtnClickViewController.m
實(shí)現(xiàn)了MVC中的Controller.可以定義一些IBOutlet元素和IBAction方法與View通信。
@interface BtnClickViewController : UIViewController{ IBOutlet UILabel* statusText; } @property (retain,nonatomic) UILabel *statusText; - (IBAction)buttonPressed:(id)sender; @end
View對應(yīng)那個(gè)文件呢? 答案是Resource下的MainWindow.xib和BtnClickViewController.xib。MainWindow.xib文件在在應(yīng)用程序加載時(shí)是會(huì)被自動(dòng)加載的,這其實(shí)是在plist文件中配置的。然后MainWindow.xib會(huì)加載子視圖BtnClickViewController.xib。
為什么會(huì)命名為ViewController,而不是分開命名?可能是因?yàn)閂iew和Controller關(guān)系太緊密了,view就是Controller的跟班。實(shí)際編程時(shí)一定要分清MVC各部分的職責(zé)。
自始至終沒見到Model的面,其實(shí)M是可選的,特別是對于簡單的應(yīng)用。任何與界面無關(guān)的,我們添加的自定義類來定義我們應(yīng)用程序的對象,都屬于Model的范疇。
關(guān)于怎么解析iPhone中的MVC框架設(shè)計(jì)模式問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注億速云行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。