iOS編程基礎: Hello World App是如何運作的?

翻譯 By Long Luo

原文鏈接:iOS Programming Basic: How Does the Hello World App Work?

譯者注:
1. 由於這是技術文章,所以有些詞句使用原文,表達更準確。
2. 由於水平有效,有些地方可能翻譯的不夠準確,如有不當之處,敬請批評指正.

我希望你享受了第一個iOS編程教程,同時已經創造了你的第一個App。在進入下一教程以及製作一個更復雜的App之前,我們有必要回過頭,分析這個Hello World App。對於你理解一些Objective-C語言的語法和App的內部工作機制有很大幫助。

目前爲止,想必你已經按照教程完成了你的第一個Hello World App。不過,當你完成了這個教程之後,你腦海裏肯定冒出了更多疑問:

  • xib,.h,.m文件是做什麼用的?
  • showMessage內部的代碼是什麼?用什麼作用?
  • 當你按下Hello World的按鈕發生了什麼呢?按鈕是如何觸發了顯示消息的動作呢?
  • Xcode中的Run按鈕是如何運作的?

我希望你已經對Xcode IDE開發環境比較熟悉了,這樣我就不用再解釋一遍上面的內容了。對於每個開發者來說,理解代碼的內部細節和抓住基本概念對於iOS編程是很有必要的。對於某些技術概念,如果你沒有絲毫的編程背景來說,理解一些技術概念是有一定難度的。但是,別擔心,這裏僅僅是一個開始。如果你繼續學習後續的教程,寫出更多的代碼,你就能更好的理解iOS編程。盡你所能努力學習更多知識吧!

Interface Builder, Header and Implementation Files

首先,.xib, .h, .m文件是什麼呢?這是一位讀者提出的一個非常好的問題。在項目導航中,你應該可以找到3種主要的文件類型:.xib, .h, .m。(如果你打開“Supporting Files”文件夾,你可以找到其他的文件類型,例如plist和framework。但到目前爲此,我們先忘掉它們,在今後課程中我們會討論它們。)

.xib

  • 如果一個文件也有.xib的擴展名,它們是Interface Builder文件,存儲了應用的UI。當你點擊了.xib文件,Xcode會自動的打開Interface Builder界面,你可以通過拖動和放下來編輯應用的UI。如下圖所示:

Interface Builder in Xcode

Interface Builder in Xcode

.h and .m

  • .h擴展名的文件表示這是頭文件.m擴展名錶示是具體的實現。和其他大多數編程語言一樣,Objective-C的源碼也分爲2部分:接口實現

爲了便於你更好的理解這2者關係,我們拿電視遙控器打比方。我們可以很方便地使用無線遙控器調節電視的音量。你按下音量+按鈕增大揚聲器的音量。切換頻道時,你只需要按下頻道數字。那我來問問你,你知道當你按下音量按鈕的背後發生了什麼嗎?估計你不知道吧。我相信大部分人都不知道遙控器和揚聲器之間是如何通信的。我們僅僅知道的是,那個按鈕是用來調節音量的。在這裏,按鈕就是接口,而按鈕之後的具體細節我們稱之爲實現

現在你應該對接口和實現有了一個更深的理解。讓我們回到代碼,在Objective-C語言中,一個類的接口是放在.h文件中。我們使用語法標示符@interface來聲明一個類的接口。看下HelloWorldViewController.h的具體實現:

@interface HelloWorldViewController : UIViewController

-(IBAction)showMessage;

@end

HelloWorldViewController這個類名以“@interface”開頭。內部則聲明瞭一個“showMessage”的實現,也可以稱之爲方法

就像音量按鈕,顯然我們不知道showMessage這個方法是如何運作的。你僅僅知道它是用於在屏幕上顯示一條信息。具體的實現則放在HelloWorldViewController.m文件中,如下所示:

@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 App

Hello World App

想必你已經弄明白了接口和實現吧?

Behind the Touch and Tap

當你按下 “Hello World”按鈕實際上發生了什麼? “Hello World” 按鈕是如何調用 “showMessage” 方法去顯示“Hello World”的消息呢?

回想起你是如何在Interface Builder建立起“Hello World”按鈕和“sendMessage”的具體動作的關聯的。再次打開“HelloWorldViewController.xib” ,選擇“Hello World” 按鈕,在Utility區域點擊“Sent Events”按鈕打開發生事件。

Hello World Button Send Events

發送部分展示了所有的關於事件和動作的聯繫。例如上述圖片所示,“Touch Up Inside” 事件就關聯到 “showMessage”的動作。在iOS中,app是事件驅動的。控制/目標監聽特定的動作,例如觸摸和按下。當事件觸發之後,目標就會調用預設的關聯到事件的動作。

在我們的Hello World App中,當用戶在按鈕上擡起手指, “Touch Up Inside”的事件就觸發了。結果,它會調用“showMessage”的動作去顯示 “Hello World” 的消息。

下圖很直觀的展示了剛纔所描述的事件流:

Event and Message Flow of Hello World App

Event and Message Flow of Hello World App

Behind the Scene of the “Run” Button

當你點擊“Run” 按鈕,Xcode就會載入模擬器,運行你的App。但是在這個場景之後,發生了什麼?作爲一名程序員,你需要了解它的整個流程。

Event and Message Flow of Hello World App

整個流程可以分爲3部分:編譯、打包和運行

編譯

  • 你可能會認爲iOS可以讀懂Objective-C代碼。大錯特錯,實際上,iOS只能讀懂機器碼。Objective-C代碼只是便於程序員去讀和寫代碼。我們需要將Objective-C源碼翻譯成機器碼,這樣iOS纔可以讀懂你的App的源碼。這個過程就稱之爲編程。Xcode已經自帶了編譯器用於編譯源碼。

打包

  • 不同於其他源碼,一個App通常包含大量的資源文件,比如圖片,文本,xlib文件等等。所有的這些資源都必須要打包進最終的App中。

我們通過把上述2個過程稱之爲build

Xcode-Build-Option

Run

  • 按下之後,啓動模擬器,載入你的App.

Long Luo created at 19:22 ~ 21: 06 May 5th, 2014 @Shenzhen, China.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章