精品欧美一区二区三区在线观看 _久久久久国色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ù)棧公眾號

性欧美精品中出| 男女爱爱视频网站| 中文区中文字幕免费看| 在线一区免费| 亚洲国产美女精品久久久久∴| 国产九九九九九| 91吃瓜网在线观看| 99视频一区二区三区| 国产精品青草久久久久福利99| 欧美日韩偷拍视频| 精品一二三区| 亚洲国产第一页| 五月天婷婷亚洲| 欧美gay囗交囗交| 亚洲卡通欧美制服中文| 欧洲精品一区色| 成人免费视频国产| 激情综合色播五月| 日本精品久久中文字幕佐佐木| 91成人福利视频| 精品一区二区三区在线| 亚洲第一区在线| 九九热精品国产| 欧美aaa视频| 欧美日韩国产综合视频在线观看中文| 伊人色综合影院| jzzjzzjzz亚洲成熟少妇| 成人精品gif动图一区| 国产在线视频2019最新视频| 日本最新中文字幕| 午夜亚洲福利| yw.139尤物在线精品视频| 变态另类丨国产精品| 超碰在线成人| 日韩欧美中文一区| 日韩欧美中文视频| 国产电影一区二区| 欧美日韩高清一区二区三区| 成人在线看视频| 日韩脚交footjobhdboots| 亚洲国产毛片aaaaa无费看| 天天干天天色天天爽| 91亚洲精选| 欧美国产激情二区三区| 欧美一区二区三区四区五区六区| 色婷婷中文字幕| 成人深夜福利app| yellow视频在线观看一区二区| 国产乱码精品一区二区三区精东| 久久国产成人午夜av影院| 国产精品久久一区| 亚洲天堂中文网| 久久精品999| 成人做爽爽免费视频| 91午夜交换视频| 韩国一区二区三区| 超碰在线观看97| 男人天堂av网| 久久久影视传媒| 日韩欧美在线电影| 成人免费黄色网页| 国产精品久久久久精k8| 国产精品99久久久久久大便| 黄色精品免费看| 亚洲自拍偷拍综合| 黄色www网站| 新版的欧美在线视频| 狠狠色狠色综合曰曰| 欧美视频在线免费播放| 北岛玲heyzo一区二区| 色网综合在线观看| 日本中文字幕观看| а√中文在线天堂精品| 日韩精品中文字幕在线播放| 精品人妻无码一区| 无码一区二区三区视频| 欧美成人一二三| 四虎成人精品永久免费av| 美女黄色成人网| 国产欧美一区二区白浆黑人| 国产剧情久久久| heyzo一本久久综合| 任我爽在线视频精品一| 成人影院在线看| 午夜日韩在线电影| 五月婷婷狠狠操| 亚洲视频一起| 亚洲午夜小视频| 亚洲熟女www一区二区三区| 亚洲美女啪啪| 国产欧美精品xxxx另类| 成人久久久精品国产乱码一区二区| 久久人人超碰精品| 成年人黄色在线观看| av老司机免费在线| 欧美日韩一区久久| 在线免费观看a级片| 色综合色综合| 91高清免费在线观看| 一级黄色片视频| 97久久超碰精品国产| 中文字幕色一区二区| 成人bbav| 91精品一区二区三区在线观看| 久久久久9999| 羞羞色午夜精品一区二区三区| 欧美一区二区三区艳史| 国产黄色高清视频| 欧美国产日本视频| 欧美成人三级在线视频| av在线亚洲一区| 亚洲视频在线观看免费| 精品小视频在线观看| 久久精品久久精品| 日本一区二区三区在线视频| 91探花在线观看| 91精品蜜臀在线一区尤物| 免费观看av网站| 激情丁香综合| 91热福利电影| 免费a级人成a大片在线观看| 一本一本久久a久久精品综合麻豆| 久久艹这里只有精品| 日韩欧美中文| 国产精品草莓在线免费观看 | 性色一区二区三区| 99中文字幕| 国产超级va在线视频| 欧美日精品一区视频| 色婷婷在线影院| 亚洲一区二区三区高清| 国产精品加勒比| 黄页在线观看免费| 日韩免费视频一区二区| 亚洲人做受高潮| 久久精品国产在热久久| 亚洲精品在线免费| 精品免费av在线| 亚洲人成网在线播放| 天天干天天干天天| 26uuu国产一区二区三区| www.浪潮av.com| 天堂网av成人| 国产成人精品久久二区二区| 男操女在线观看| 在线免费av一区| 超碰人人干人人| 美女视频黄 久久| 午夜啪啪免费视频| 国产精品久久久久久久久久久久久久久| 中文字幕日韩视频| 国产精品久久免费| 一区二区三区波多野结衣在线观看 | 国产区二精品视| av在线最新| 亚洲欧美日韩精品| 中文字幕人妻一区二区三区视频 | a日韩av网址| 亚洲人高潮女人毛茸茸| 国产精品无码粉嫩小泬| 成人免费一区二区三区在线观看 | 日韩视频一区二区三区四区| 欧美高清第一页| 十八禁一区二区三区| 色哟哟国产精品免费观看| 欧美大波大乳巨大乳| 麻豆精品一区二区综合av| 桥本有菜av在线| 亚洲综合影院| 日韩av观看网址| 看黄网站在线| 亚洲国产精品va在线看黑人| 亚洲GV成人无码久久精品 | 我家有个日本女人| 99久久国产综合色|国产精品| aa免费在线观看| 小小影院久久| 牛人盗摄一区二区三区视频| 久久亚洲国产精品尤物| 欧美激情aaaa| 韩国中文字幕2020精品| 91精品国产入口| 五月婷婷开心网| 国产精品短视频| av在线播放网址| 奇米888四色在线精品| 少妇一晚三次一区二区三区| 久草精品在线| 91文字幕巨乱亚洲香蕉| 欧美男体视频| 欧美wwwxxxx| 青青草免费观看免费视频在线| 777久久久精品| 国产乱国产乱老熟| 亚洲精品视频一区| 亚洲自拍偷拍图| 不卡免费追剧大全电视剧网站| 可以看污的网站| 国产偷自视频区视频一区二区| 亚洲一卡二卡三卡| 日韩理论电影中文字幕| **亚洲第一综合导航网站| gogo亚洲高清大胆美女人体| 色综合老司机第九色激情| 国产福利小视频在线| 亚洲高清一区二| 99久久精品国产一区二区成人| 日韩欧美国产一区二区| 久久久久成人片免费观看蜜芽| 中文字幕不卡在线播放| 呦呦视频在线观看| 国产丶欧美丶日本不卡视频| 丰满少妇在线观看| 久久精品五月| www.日本在线播放| 国产一区二区三区自拍| 爱爱爱视频网站| 国产一区二区三区四区五区传媒 | 亚洲影院理伦片| 日韩在线视频免费看| 久久久精品tv| 亚洲男人在线天堂| 成人h动漫精品一区二| 中文字幕在线视频一区二区| 奇米影视在线99精品| 免费男同深夜夜行网站| 亚洲一区日韩| 免费看一级大黄情大片| 亚洲成色精品| 996这里只有精品| 欧美 日韩 国产一区二区在线视频| 亚洲国产另类久久久精品极度| 国产精品密蕾丝视频下载| 久久久久久精| 网曝91综合精品门事件在线| 国产伦精品一区二区三区照片| caoporn成人| 国产精品一区免费观看| 国产图片一区| 国产综合 伊人色| 欧美大胆视频| 久久精品久久精品国产大片| 久久悠悠精品综合网| 国产一区二区无遮挡| 女人抽搐喷水高潮国产精品| 国产一区二区免费在线观看| 国产精品qvod| 久久手机视频| 国产成人一区| 伊人色综合影院| 欧美在线精品一区| 久久成人福利视频| 国产伦理一区| 91极品视频在线观看| 九九国产精品视频| 国产又粗又猛大又黄又爽| 国产91丝袜在线播放九色| 日韩少妇一区二区| 久久综合五月天婷婷伊人| 日韩免费高清一区二区| 97精品视频在线观看自产线路二| 免费看黄色的视频| 中文字幕在线不卡| 激情视频在线播放| 精品国产91久久久久久老师| 日批视频免费在线观看| 欧美日韩日日摸| www.午夜激情| 国产婷婷成人久久av免费高清| 国产在线一二三区| 欧美精品生活片| 人成在线免费网站| 国产精品视频自拍| heyzo欧美激情| 日本在线观看一区二区| 欧美电影一区| 欧美视频免费看欧美视频| 日韩国产欧美三级| 亚洲欧美激情网| 国产成人在线观看| av男人的天堂av| 1024成人网| 国内免费精品视频| 欧美日本一区二区在线观看| www.激情五月| 亚洲石原莉奈一区二区在线观看| 黄色一级大片在线免费看产| 97福利一区二区| 日本国产一区| 精品视频第一区| 欧美一区二区三区久久精品| jizzjizzxxxx| 国产精品伊人色| 欧美激情 一区| 亚洲电影中文字幕在线观看| 精品国产青草久久久久96| 精品电影一区二区三区| 91sp网站在线观看入口| 97视频在线观看免费| 99久久999| 日本精品一区| 99热精品在线观看| 在线观看av免费观看| 久久久久久久综合色一本| 免费在线视频一区二区| 欧美日韩国产中文| 香蕉av在线播放| 色综合久久悠悠| 成人国产精品久久| 四虎一区二区| 国产日韩1区| 久久精品aⅴ无码中文字字幕重口| 国产精品亲子伦对白| 免费黄色网址在线| 精品动漫一区二区三区在线观看| 黄色动漫在线| 国产在线视频2019最新视频| 欧美热在线视频精品999| 国产精品又粗又长| 成人精品一区二区三区中文字幕 | 精品久久久久久中文字幕大豆网| hs视频在线观看| 久久久久www| 色诱色偷偷久久综合| 日韩av电影免费播放| 免费视频一区| aaaaa一级片| 狠狠躁18三区二区一区| 天堂在线观看视频| 午夜精品久久久久久久久久久久 | 日本视频一区二区不卡| 亚洲伊人观看| 大地资源二中文在线影视观看 | 最近中文字幕免费观看| 亚洲一区二区久久| 肉色欧美久久久久久久免费看| 久久99久久99精品蜜柚传媒| 亚洲裸体俱乐部裸体舞表演av| 国产精品一区二区人妻喷水| 亚洲国产成人va在线观看天堂| 精品国产亚洲一区二区麻豆| 成人97在线观看视频| 日韩精品视频在线看| 日韩不卡视频一区二区| 国产精品一二三在| 国产一级一级片| 亚洲国产欧美一区二区三区久久| h片在线观看视频免费免费| 黄色小网站91| 欧美亚洲免费| 久久精品三级视频| 777色狠狠一区二区三区| 伊人春色在线观看| 国产伦精品一区二区三区四区免费| 亚洲精品看片| 色一情一交一乱一区二区三区 | 91精品国产乱码久久久久久蜜臀 | 在线电影看在线一区二区三区| 久久99最新地址| 欧美成人精品一区二区免费看片| 亚洲第一级黄色片| 国产精品专区免费| 在线播放 亚洲| gogogo免费视频观看亚洲一| 天天综合网久久综合网| 在线性视频日韩欧美| 久久一级大片| 欧美极品欧美精品欧美| 中日韩av电影| 丰满人妻一区二区| 欧美一乱一性一交一视频| 欧美mv日韩| 中文字幕无人区二| 91成人免费在线| caopo在线| 麻豆91av| 国模一区二区三区白浆| 亚洲黄色三级视频| 色妞在线综合亚洲欧美| 国产精品一区二区中文字幕| 黄色高清无遮挡| 一区二区三区久久| 国产小视频免费在线网址| 亚洲一区二区三区香蕉| 美女久久网站| 欧美三级在线免费观看| 亚洲免费视频网站| 日韩不卡在线视频| 亚洲成人av免费看| 亚洲国产日产av| 色老头视频在线观看| 国产三区二区一区久久| 美女视频第一区二区三区免费观看网站| 国产亚洲欧美久久久久| 色多多国产成人永久免费网站 | 免费国产a级片| 亚洲色欲色欲www| 精品av中文字幕在线毛片| 91亚色免费| 久久99九九99精品|