精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Cocoa教學(xué):對比Windows OOP與Cocoa MVC

移動開發(fā) iOS
本文我們將介紹Windows OOP與Cocoa MVC之間的對比,在Objective-C里,你必須明確地創(chuàng)建一個controller用來處理model和view之間的變化。其實MVC應(yīng)該被稱做MCV,因為controller是在model和view之間的一個協(xié)調(diào)員。如果你的model發(fā)生了改變,你的controller會通知view。如果用戶在view中做出了某種改變,controller就會通知model。所以我建議初學(xué)者可以叫它MCV,會更加形象一點。有點跑題了。

本文我們將介紹Windows OOP與Cocoa MVC之間的對比。在Windows里,尤其是C# .NET,你可以通過添加一個Form對象來創(chuàng)建新的窗口,而且還可以簡單地在設(shè)計窗口中添加一些不同的“控件”。這些操作是非常容易的。不過一旦窗口創(chuàng)建好之后,你需要在主窗口的代碼中建立剛才新建的窗口的實例,然后提供公共變量在兩個窗口之間設(shè)置或者獲取數(shù)據(jù)。窗口類是由Windows Form模板寫好直接交給你使用的,這當然可以使代碼看起來清晰干凈,但是它打破了MVC的慣例,所以大部分Windows的程序員會花費不少時間提升他們思考的方式也就不足為奇了。

我用VS2008做了一個demo程序,截圖大概是這樣的:

我用VS2008做了一個demo程序,截圖大概是這樣的

看一下主窗口的代碼:

  1. public partial class Form1 : Form 
  2.  
  3.  
  4. Panel p; 
  5.  
  6.  
  7. public Form1() 
  8.  
  9.  
  10. InitializeComponent(); 
  11.  
  12. p = new Panel(); 
  13.  
  14. p.Show(); 
  15.  
  16.  
  17.  
  18. private void btnChangeText_Click(object sender, EventArgs e) 
  19.  
  20.  
  21. p.OutputText = this.tbInputText.Text; 
  22.  
  23.  

注意看我聲明了一個Panel的對象,這是我們需要在上面設(shè)置文字的第二個窗口(view)。下面是Panel類的代碼:

  1. public partial class Panel : Form 
  2.  
  3.  
  4. public Panel() 
  5.  
  6.  
  7. InitializeComponent(); 
  8.  
  9.  
  10.  
  11. public string OutputText 
  12.  
  13.  
  14. set 
  15.  
  16.  
  17. this.tbOutputText.Text = value
  18.  
  19.  
  20.  

好,代碼很容易理解,但是從這里就可以看出我的觀點:MVC模型已經(jīng)被破壞了。雖然這個例子里面并沒有任何編程邏輯,不過很清楚的是這樣的設(shè)計導(dǎo)致你只需要把代碼放到按鈕的事件處理里面就可以了,而不是去將邏輯抽象到controller對象中。

你也許會問,我在C#中如何做MVC呢?呃……這是一個關(guān)于Objective-C、Cocoa編程的網(wǎng)站,對于讀者們來說這是個作業(yè)了……不過坦白講,我可不知道。我知道那是一件可能的事情,不過C#語言的內(nèi)部就沒有把開發(fā)者向這個方向去引導(dǎo)。我也看過一些講這方面事情的文章,不過那些也都是基本上困難到?jīng)]法實踐的。有幾篇號稱是MVC不過根本不算,所以如果你真想在C#上面實現(xiàn)MVC,自己想辦法弄吧……^o^ 我想說的其實就是要想在C#上面實現(xiàn)MVC,那算你狠。

Objective-C/Cocoa的方式

在Objective-C里,你必須明確地創(chuàng)建一個controller用來處理model和view之間的變化。其實MVC應(yīng)該被稱做MCV,因為controller是在model和view之間的一個協(xié)調(diào)員。如果你的model發(fā)生了改變,你的controller會通知view。如果用戶在view中做出了某種改變,controller就會通知model。所以我建議初學(xué)者可以叫它MCV,會更加形象一點。有點跑題了。

在Objective-C/Cocoa的世界里,我們建立的controller通常是指應(yīng)用程序(Application)的托管(Delegate),或者可以簡單稱做app delegate。很多Windows程序員都會在這里迷惑不解的事情是,我們通常學(xué)習(xí)到的面向?qū)ο箝_發(fā)就是你應(yīng)該去做的事情,而并不會關(guān)注為什么你會去做,或者你為什么不去做。我并不是說你別用OOP的思想,而正相反我建議去用。問題是如果把一切都抽象化,那就有點太傻叉了……我們應(yīng)該有很好的理由去寫這些代碼,而不要用諸如“我從大學(xué)里面學(xué)的……”或是“我一直就這么干……”這種理由。

當你在Objective-C里面建立一個app delegate的時候,這個delegate可以做為你所有model和view的controller,或者你也可以為不同的model和view分別創(chuàng)建controller。想怎么干就怎么干吧。不過有一個比較重要的事情是要記住的,如果你把所有的代碼都扔到同一個app delegate類里頭,那你就有了一個超大的app delegate文件,很難看清楚。

一些例子程序

為了幫助那個提出問題的朋友,還有另外一些想從Windows開發(fā)轉(zhuǎn)變到Cocoa開發(fā)的朋友們,我也寫了點簡單例子來幫助把這個問題變簡單。如果你想讓兩個View,或者兩個窗口可以互相之間通信,只要在他們之間傳遞消息就可以了。雖然把你的view們封裝到它們自己的類中并不是壞事,不過通常來說真的沒必要。在任何一種語言和任何一種平臺上,都有實現(xiàn)這個功能的方法,所以就別管我沒提到的事情了,我也沒說這是唯一的方法不是……我說的方法是簡單直接的方法,可以幫你更快的理解。

我同樣建了一個簡單的demo程序來演示上面說的,這里是截圖:

demo程序

你可以在這里下載例子。

這里是我提到的代碼,只需要在app delegate的頭文件中將你的view聲明為outlet:

  1. @interface AppDelegate : NSObject { 
  2.  
  3. IBOutlet NSTextField *inputText; 
  4.  
  5. IBOutlet NSTextField *outputText; 
  6.  

然后聲明這樣一個方法,在按下按鈕之后會執(zhí)行:

  1. - (IBAction)updateText:(id)sender; 

最好要做的事情就是在IB里面把action和outlet連到AppDelegate對象上,任務(wù)完成。就這么簡單。

為什么Windows的方法爛,Mac的方法贊

好吧,這個小標題僅僅是個玩笑,Windows專家們千萬表噴俺。不過我的確認為C#設(shè)計用戶界面的方式會把人們的代碼搞得賊亂,而且明顯不是MVC模式。

當然,又來了,怎么做還是看你自己,不過.NET的用戶界面設(shè)計工具非常鼓勵用戶去破壞MVC模式。當你在設(shè)計器里面把一個按鈕拽到窗口里,然后雙擊那個按鈕的時候,它就自動地給你指到按鈕點擊事件代碼里,大部分程序員就自然而然地在那里寫代碼了。當你在設(shè)計過程的時候,倒也沒什么,不過它根本沒有做什么來支持你將邏輯和表現(xiàn)分開。

在Objective-C里,想破壞MVC設(shè)計模式倒是很困難的事情。基本上你都必須遵循這個模式。甚至當你使用Interface Builder在app delegate和action及outlet中間建立連接的時候,都會帶有一個可視的MVC表現(xiàn)。要連接app delegate類(你的controller)到outlet的時候(比如輸入框),你按住ctrl之后從AppDelegate拖拽一根線放到outlet上。當你想告訴AppDelegate執(zhí)行一些動作,你要從觸發(fā)動作的對象中拽到AppDelegate對象上。反過來是不行的。養(yǎng)成這樣的習(xí)慣其實很好,只不過Windows的鐵桿程序員會相當不習(xí)慣。

結(jié)論

從Windows程序員轉(zhuǎn)到Mac程序員是有一點挑戰(zhàn)的,不過你越早拋掉從前的開發(fā)的概念,就越容易接受Mac開發(fā)的概念。想想令狐沖吧……Mac的開發(fā)的確是不太一樣的。要習(xí)慣這種開發(fā)思路,而不要試圖沿用從前的習(xí)慣來進行Mac開發(fā)。

承認這一點吧兄弟們,工程師們都是很傲慢的,而且當學(xué)習(xí)一門新的語言、技術(shù)或是平臺的時候,通常會認為他們已經(jīng)很清楚了。最后這句的英文真的很棒,我不知道怎么翻譯才能完美的表達這句話,和大家共勉:Goto is not inherently evil, you know? Until next time.

責任編輯:佚名 來源: cocoachina
相關(guān)推薦

2011-08-11 15:46:55

CocoaCocoa Touch框架

2011-07-25 13:15:34

Cocoa MVC 架構(gòu)

2011-07-22 15:50:06

Cocoa MVC 視圖

2011-08-10 18:37:32

CocoaMac OS X

2011-07-07 13:51:24

Cocoa 框架

2011-07-07 13:39:14

Cocoa 框架

2011-07-07 13:30:32

Cocoa Core

2011-07-07 13:59:49

Cocoa Objective- 根類

2011-07-07 14:22:27

Cocoa 對象 生命周期

2011-08-15 16:28:06

Cocoa內(nèi)存管理

2012-05-21 09:51:25

對象Cocoa

2021-06-03 08:55:58

面向協(xié)議編程

2021-06-04 09:01:27

Cocoa 協(xié)議編程 Swift

2011-08-10 18:13:01

Cocoa文字字符串

2011-05-11 10:28:03

2011-07-08 18:03:30

Cocoa Touch 網(wǎng)絡(luò)

2011-07-08 16:43:46

iPhone Cocoa 多線程

2011-07-26 10:42:00

Cocoa Cocoa2d 游戲

2011-08-10 18:47:18

Cocoa字符串

2011-06-17 16:23:49

Cocoa蘋果
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲人挤奶视频| 一区二区三区短视频| 高清不卡一区二区在线| 啪一啪鲁一鲁2019在线视频| 成人免费视频入口| 亚洲成人影音| 欧洲精品中文字幕| 2018中文字幕第一页| 大胆av不用播放器在线播放| 国产suv精品一区二区三区| 国产成人精品一区二区三区| 欧美片一区二区| 精品久久久久久久| 亚洲第一区第一页| 人妻巨大乳一二三区| 三上悠亚一区二区| 亚洲午夜三级在线| 爱爱爱视频网站| 精品99又大又爽又硬少妇毛片| 国产精品香蕉一区二区三区| 国产精品黄色影片导航在线观看| 久久久久无码精品国产| 色综合久久一区二区三区| 亚洲精品久久久久| 古装做爰无遮挡三级聊斋艳谭| 久久久一本精品| 五月婷婷久久丁香| 人妻激情另类乱人伦人妻| 2019中文字幕在线视频| 91麻豆免费看| 国产乱子伦精品| 国产v在线观看| 九色porny丨国产精品| 国产v综合ⅴ日韩v欧美大片 | 香蕉精品久久| 精品福利二区三区| 91av免费观看| 视频二区欧美毛片免费观看| 欧美久久久久久蜜桃| 另类小说第一页| 亚洲第一会所| 欧日韩精品视频| 免费大片在线观看| 不卡av影片| 色综合久久久网| 激情综合在线观看| 色戒汤唯在线观看| 欧美日韩激情网| 波多野结衣av一区二区全免费观看| 黄色网址在线免费观看| 国产精品久久久久久亚洲毛片| 日韩亚洲视频在线| 国产免费a∨片在线观看不卡| 91丨porny丨国产入口| 好吊色欧美一区二区三区| 狠狠躁日日躁夜夜躁av| 粉嫩av一区二区三区| 国产精品毛片一区视频| 婷婷在线观看视频| 91欧美激情一区二区三区成人| 久久国产精品免费一区| 神马亚洲视频| 久久久久久久久一| 亚洲一区二区高清视频| 国产区在线看| 午夜亚洲国产au精品一区二区 | 久久精品盗摄| 国产成人综合av| 91好色先生tv| 国产高清视频一区| 狠狠色综合色区| 国产三级在线免费观看| 国产精品国产馆在线真实露脸| 一本一生久久a久久精品综合蜜| 欧美jizz18性欧美| 亚洲综合色噜噜狠狠| 妞干网在线观看视频| 人人视频精品| 欧美福利视频一区| 久草视频福利在线| 亚洲人成亚洲精品| 久久激情视频免费观看| 国产一级淫片免费| 美女精品网站| 91综合免费在线| 人人妻人人澡人人爽久久av| 久久综合狠狠综合久久激情| 手机成人在线| 毛片在线网址| 欧美午夜精品久久久| 免费高清视频在线观看| 欧洲亚洲视频| 久久精品免费播放| 日韩在线视频免费播放| 麻豆成人在线观看| 国产亚洲二区| 麻豆tv在线| 黑人欧美xxxx| 免费观看黄网站| 国产欧美日韩| 欧美激情在线有限公司| 亚洲午夜无码久久久久| 福利一区二区在线观看| 色阁综合av| 91超碰在线| 欧美老肥妇做.爰bbww| 星空大象在线观看免费播放| 色综合久久网| 日本欧美一二三区| 亚洲免费视频网| 国产精品国产三级国产aⅴ入口 | 国产午夜性春猛交ⅹxxx| 久久se这里有精品| 麻豆精品视频| av小说在线播放| 欧美一卡二卡在线观看| 在线观看免费小视频| 亚洲人成在线影院| 99r国产精品视频| 337p日本欧洲亚洲大胆鲁鲁| 欧美日韩一区二区免费视频| 四虎国产精品免费| 天天插综合网| 国产免费一区二区三区在线能观看| 日日躁夜夜躁白天躁晚上躁91| 亚洲视频狠狠干| 亚洲精品手机在线观看| 伊人久久大香线蕉av不卡| 久久久久久成人| 午夜精品久久久久久久99| 国产精品的网站| 婷婷丁香激情网| 精品在线手机视频| 国产91热爆ts人妖在线| 亚洲av成人无码久久精品老人 | 波多结衣在线观看| 九九精品在线| 国产精品av电影| 欧美一区二区国产| 欧美在线视频第一页| 精品一区二区三区久久| 亚洲综合第一| 久久青草视频| 色偷偷av亚洲男人的天堂| 色老头在线视频| 久久久国产精品午夜一区ai换脸| 国产女大学生av| 私拍精品福利视频在线一区| 欧美亚洲在线视频| 男同在线观看| 欧美性一二三区| 青青草自拍偷拍| 极品少妇xxxx精品少妇| 中文字幕黄色大片| 在线视频亚洲欧美中文| 久久久久久久国产精品视频| 人妻少妇精品无码专区| 午夜天堂影视香蕉久久| 久久精品老司机| 老司机免费视频久久| 性欧美.com| 亚洲成人精品综合在线| 色在人av网站天堂精品| 日批视频免费播放| 在线这里只有精品| 国产三级精品三级观看| 国产精品影视天天线| 韩日视频在线观看| 久久av综合| 国产精品欧美久久久| 高清全集视频免费在线| 欧美mv日韩mv国产| 免费看日批视频| 国产精品欧美久久久久无广告| 制服丝袜中文字幕第一页 | 国产免费av电影| 亚洲一二三区在线观看| brazzers精品成人一区| 麻豆成人久久精品二区三区红| 国产又大又长又粗又黄| 操欧美女人视频| 国产suv精品一区二区| 毛片网站在线免费观看| 亚洲成在人线av| 青青艹在线观看| 一片黄亚洲嫩模| 亚洲国产av一区| 韩国av一区二区三区四区| 久久综合九色综合88i| 色小子综合网| 九色91在线视频| 国语精品视频| 日本亚洲欧洲色α| 最新国产露脸在线观看| 亚洲视频电影图片偷拍一区| 精品国产伦一区二区三| 一本到三区不卡视频| 青娱乐在线视频免费观看| 久久精品一区四区| 日韩精品――色哟哟| 日本一不卡视频| 日韩欧美一区二| 欧美一区在线看| 偷拍视频一区二区| 欧美三级午夜理伦三级小说| 91九色蝌蚪国产| 经典三级一区二区| 国内揄拍国内精品| 麻豆传媒免费在线观看| 亚洲另类图片色| 欧美一级在线免费观看| 欧美三级视频在线观看 | 69堂精品视频| 99久久久无码国产精品免费蜜柚| 亚洲电影激情视频网站| 日本天堂中文字幕| 国产欧美精品一区| 欧美bbbbb性bbbbb视频| 国产91精品入口| 亚洲一区二区中文字幕在线观看| 日韩高清中文字幕一区| 成人免费aaa| 自产国语精品视频| 中文字幕日韩一区二区三区不卡| 免费一区二区三区视频导航| 久久99精品久久久久子伦| 亚洲成人影音| 超碰国产精品久久国产精品99| 亚洲国产91视频| 国产日本欧美一区| 亚洲精品.com| 日产日韩在线亚洲欧美| 美女100%一区| 日本亚洲欧洲色| 高清电影一区| 国产成人精品视频| 久久r热视频| 国产精品成人观看视频国产奇米| 亚洲人成午夜免电影费观看| 91sa在线看| 伊人成综合网站| 国产日产欧美一区| 欧美一区二区三区在线免费观看| 丝袜视频国产在线播放| 亚洲精品电影在线| 三级理论午夜在线观看| 日韩精品中文字幕有码专区| 五月激情婷婷网| 亚洲女在线观看| 国产三级视频在线看| 国产亚洲欧洲在线| 最新97超碰在线| 久久人人爽人人爽人人片亚洲| 欧美私人网站| 欧美成人精品在线| 波多野结衣在线高清| 午夜伦理精品一区| 亚洲最大网站| 国产精品视频网| 成人国产精品久久| 99视频免费观看蜜桃视频| 国产伦精品一区二区三区在线播放 | 欧美综合激情| 91亚洲国产| 国产一二三四五| 亚洲免费黄色| 天天爽天天爽夜夜爽| 国产精品一二三区在线| 欧美熟妇精品一区二区蜜桃视频| 99re这里都是精品| 东京热无码av男人的天堂| 玉足女爽爽91| 国产精品一区二区三区四| 欧美在线色视频| av av片在线看| 精品视频www| 日本蜜桃在线观看| 国模叶桐国产精品一区| 日本一区免费网站| 不卡日韩av| 黑丝美女一区二区| 国产精品免费看久久久无码| 亚洲专区免费| 伊人五月天婷婷| 91视频免费播放| 色欲一区二区三区精品a片| 亚洲午夜在线电影| 一本色道久久综合精品婷婷| 精品久久久久久无| 国产福利免费在线观看| 欧美丰满少妇xxxx| 日韩精品第一| 加勒比在线一区二区三区观看| 日韩av免费大片| 少妇高潮喷水在线观看| 久久国产精品露脸对白| 无码精品一区二区三区在线播放| 中文成人综合网| a v视频在线观看| 欧美一区午夜视频在线观看| 日韩av成人| 欧美肥老妇视频| 亚洲爽爆av| 欧美深深色噜噜狠狠yyy| 欧美精品一线| 制服丝袜中文字幕第一页 | 伊人久久综合一区二区| 91传媒视频在线观看| 精品国产a一区二区三区v免费| 欧美亚洲色图视频| 国产资源精品在线观看| 欧美黄色一级生活片| 激情av一区二区| www.国产麻豆| 中文字幕日韩综合av| 美女网站在线看| 国产精品视频500部| 亚洲成人av| 777一区二区| 国产农村妇女精品| 久久亚洲天堂网| 亚洲国产精品va在线| 日本电影在线观看| 亚洲在线免费视频| 婷婷丁香综合| www.cao超碰| 国产精品国产三级国产有无不卡| www.国产毛片| 国产视频亚洲视频| 亚洲风情在线资源| 久久久久久a亚洲欧洲aⅴ| 影音先锋亚洲电影| 亚洲日本久久久| 亚洲综合男人的天堂| av官网在线观看| 欧美猛交ⅹxxx乱大交视频| 中文字幕综合| 免费在线精品视频| 狠狠色丁香久久婷婷综合丁香| 少妇视频在线播放| 欧美日韩一级视频| 午夜伦全在线观看| 成人亲热视频网站| 亚洲成人三区| 日本黄色大片在线观看| 一区二区三区四区视频精品免费 | 日韩电影免费观看在线观看| 丁香花在线电影小说观看| 国产精品对白刺激久久久| 最新日韩在线| av在线网站观看| 91国产福利在线| √新版天堂资源在线资源| 国产美女搞久久| 永久亚洲成a人片777777| 免费观看一区二区三区| 偷拍日韩校园综合在线| 亚洲欧美综合一区二区| 日韩**中文字幕毛片| 日韩国产一区| 免费国偷自产拍精品视频| 亚洲第一综合色| 能在线看的av| 91精品久久久久久久久久| 欧美一区二区三区久久精品| 91人人澡人人爽| 欧美视频裸体精品| 成人网视频在线观看| 91在线国产电影| 亚洲国产午夜| 天天操天天干天天操天天干| 欧美丰满嫩嫩电影| 波多野结衣在线观看| 日本免费高清一区| 国产九色精品成人porny | av在线播放国产| 国产欧美韩日| 蜜臀av性久久久久蜜臀aⅴ | 欧美三级网页| 泷泽萝拉在线播放| 91精品国产综合久久久蜜臀粉嫩 | 国产成人精品视频在线观看| 婷婷综合久久| 538国产视频| 欧美乱熟臀69xxxxxx| 91福利区在线观看| 亚洲v国产v在线观看| 成人性生交大片| 一级aaaa毛片| 8x海外华人永久免费日韩内陆视频| 成人毛片免费看| 五月天丁香社区| 欧美日韩激情一区二区三区| 多野结衣av一区| 宅男av一区二区三区| 26uuu国产在线精品一区二区| 99精品视频免费看| 国产成人福利网站| 影音先锋亚洲精品| www欧美com|