我希望你很享受iOS編程的教程並已經構建你的第一個應用程序。在我們繼續我們的下一個建立一個更復雜應用程序的教程之前,讓我們退后一步,仔細看看先前建立的Hello World應用程序。這將是一個讓你了解一些Objective-C的語法和應用程序的內部運作的好方法。
到目前為止,您按照一步一步的指導並構建Hello World應用程序。但當你繼續本教程的話,您可能會遇到這些問題:
· 那些 .xib, .h 和 .m 文件是什么?
· 在”showMessage”里的”urgy”是什么?他們有什么用?
· 究竟在你點擊”HelloWorld”按鈕后發生了什么?按鈕怎么觸發”showMessage”事件的?
· “Run”按鈕是怎么在Xcode里工作的?
我希望您能夠專注於探索Xcode環境,所以我沒有在以前的帖子解釋任何上述情況。然而,這是必不可少的對於每一個開發人員,理解系統內部代碼背后的細節和把握iOS編程的基本概念。對於一些技術概念,他們可能會有點難以了解,特別是如果你沒有編程背景。但是,不要擔心。這僅僅是一個開始。在以后的教程中,當你深入閱讀並寫更多的代碼,您將更好地了解iOS編程。只要你努力堅持下去就行。
Interface Builder(界面生成器),Header(頭文件)和Implementation Files(實現文件)
首先,這些.xib, .h 和 .m 文件是什么?這是一個讀者提出的非常好的問題之一。在項目瀏覽器中,你應該找到三種主要類型的文件 - .xib, .h 和 .m.。(如果展開“Supporting Files”文件夾中,你會發現其他類型的文件,如plist和framework。但現在,讓我們先忽略他們。稍后我們將談論他們。)
.xib -文件擴展名為.xib,在Interface Builder(界面生成器)中的文件存儲在應用程序的用戶界面(UI)。當你點擊.xib文件時,Xcode會自動切換到界面生成器,您可以通過拖動和拖放來編輯應用程序UI。
在Xcode界面生成器
.h and .m- .h擴展名的文件是頭文件,.m擴展名的文件是實現文件。像大多數的編程語言,Objective-C的源代碼分為兩部分:interface and implementation。
好了,把打個比方說,你可以更好地理解這兩個詞,讓我們考慮電視機的遙控器。遙控器可以通過遠程無線方便的控制電視音量。為了提高揚聲器的音量,按下“音量+”按鈕。要切換頻道,你只需輸入頻道號碼。那我問你。你知道當按下“音量”按鈕幕后會發生什么?很可能不會。我相信我們大多數人不知道如何用電視機的遙控器與電視劇進行通信和控制揚聲器的音量。我們只知道的是,該按鈕用於改變音量。在這個例子中,和你交互的按鈕就是“interface”(界面)了,按鈕背后隱藏的內部細節就是”implementation”(實現)。
現在,你應該對界面和實現有一個更好理解。讓我們回到代碼。在Objective-C中,一個類的界面組織在 “.h”的文件。我們使用“interface”的語法來聲明一個類的界面。在HelloWorldViewController.h一看,這是頭文件:
1
2 3 4 5 |
@interface
HelloWorldViewController
:
UIViewController
- (IBAction )showMessage; @end |
HelloWorldViewController以”@interface”開始,這是類名。在內部,它宣告了一個“'showMessage”的行為,這被稱為一個方法調用。
像“音量”按鈕,顯然我們不知道” showMessage”如何工作。你只知道它是用來在屏幕上顯示一條消息。實際的實現是在HelloWorldViewController.m里,實現文件:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
@implementation
HelloWorldViewController
// I've removed other methods for better reading. Focus on the showMessage method first. - (IBAction )showMessage { UIAlertView *helloWorldAlert = [ [UIAlertView alloc ] initWithTitle : @ "My First App" message : @ "Hello, World!" delegate : nil cancelButtonTitle : @ "OK" otherButtonTitles : nil ]; // Display the Hello World Message [helloWorldAlert show ]; } @end |
正如你在上面看到的,您可以使用聲明關鍵字“@implementation”來聲明實現。里面的“'showMessage”,它的實際義代碼意思是在屏幕上顯示警報消息。你可能不理解“'showMessage”方法里面的每一行代碼。簡單地說,它創造了一個標題為“My First App”和消息為“Hello World”的UIAlertView。然后,它調用了“show”的方法並要求在iOS屏幕上顯示彈出消息。

Hello World 應用程序
明白界面(interface)和實現(implementation)的概念是至關重要的。如果您有任何問題,請在我們的論壇隨時提出你的問題。
點擊背后
點擊“Hello World”按鈕后,究竟發生了什么?“Hello World”按鈕怎樣調用“'showMessage”的方法來顯示“Hello World”消息?
回想你曾經在”Interface Builder” 建立 “Hello World”按鈕和“SendMessage”函數的連接。請嘗試重新打開 “HelloWorldViewController.xib”並選擇“Hello World”按鈕。在實用區域點擊“Sent Events”按鈕,來打開發送事件。
“Sent Events”(發送事件)顯示事件和動作之間的所有連接。正如你可以看到在上面的圖中,“Touch Up Inside”的事件已連接到“'showMessage”行為。在iOS系統中,應用程序是事件驅動的。control/object(控制/對象)(例如UIButton的)監聽特定的事件(如touches(觸擊)和tap(點擊))。當事件被觸發時,對象調用與事件相關聯的預設操作。
在我們的Hello World應用程序,當用戶抬起手指接觸里面的按鈕,“Touch Up Inside”事件被觸發。因此,它調用了“' showMessage”的行動,來顯示“Hello World”消息。
下面的插圖總結了我剛才所描述的事件流。

Hello World應用程序的事件和消息流
幕后的“Run(運行)”按鈕
當您單擊“Run(運行)”按鈕,Xcode自動啟動模擬器,並運行您的應用程序。但是,會發生什么幕后?作為一個程序員,你要研究的整個過程。
整個過程可分為三個階段:編譯,打包和運行。
編譯 -你可能認為iOS理解Objective-C代碼。在現實中,IOS只讀機器代碼。Objective-C的代碼只是給你--程序員編寫和閱讀。為了讓iOS的理解應用程序的源代碼,我們必須要經過一個翻譯過程中,把Objective-C代碼翻譯成機器代碼。這個過程被稱為“編譯”。Xcode中已經自帶了一個內置的編譯器來編譯源代碼。
打包 -除了源代碼,應用程序通常包含資源文件,如圖片,文本文件,.xib文件,等等,所有這些資源將打包形成最終的應用程序。
我們用來指這兩個過程為“構建”過程。
運行 -這實際上是啟動模擬器,並加載您的應用程序。
有問題嗎?
我盡我所能來解釋如何Hello World應用程序的實際工作。作為一個沒有編程經驗初學者來說,我們剛才討論的概念是不容易理解。所以,不要猶豫,問的問題在我們的論壇。我,以及其他有經驗的成員都是熱心的幫助。
與往常一樣,離開了我的教程,評論分享你的想法。有什么意見都歡迎。