《iOS應(yīng)用程序開(kāi)發(fā)教程:一、創(chuàng)建新項(xiàng)目》一文中創(chuàng)建的新項(xiàng)目是基于 Xcode
模板開(kāi)發(fā)的田篇,所以運(yùn)行應(yīng)用程序時(shí)峦椰,大部分基本的應(yīng)用程序環(huán)境已經(jīng)自動(dòng)建立好了徒扶。例如趣席,Xcode
創(chuàng)建一個(gè)應(yīng)用程序?qū)ο螅ㄒ约捌渌恍〇|西)來(lái)建立運(yùn)行循環(huán)(運(yùn)行循環(huán)將輸入源寄存兵志,并將輸入事件傳遞給應(yīng)用程序),該工作大部分是由 UIApplicationMain
函數(shù)完成的宣肚,該函數(shù)由 UIKit 框架提供想罕,并且在你的項(xiàng)目的 main.m 源文件中自動(dòng)調(diào)用。
注:UIKit 框架提供應(yīng)用程序構(gòu)建和管理其用戶(hù)界面所需的全部類(lèi)霉涨。UIKit 框架只是 Cocoa Touch
提供的面向?qū)ο蟮谋姸嗫蚣苤械囊粋€(gè)按价,而 Cocoa Touch 是所有 iOS 應(yīng)用程序的應(yīng)用環(huán)境。
查看 main.m 源文件
1. 請(qǐng)確定項(xiàng)目導(dǎo)航器已在導(dǎo)航器區(qū)域中打開(kāi)笙瑟。
項(xiàng)目導(dǎo)航器顯示項(xiàng)目中的所有文件俘枫。如果項(xiàng)目導(dǎo)航器未打開(kāi),請(qǐng)點(diǎn)按導(dǎo)航器選擇欄最左邊的按鈕:
2. 點(diǎn)按項(xiàng)目導(dǎo)航器中“Supporting Files”文件夾旁邊的展示三角形逮走,打開(kāi)文件夾。
3. 選擇 main.m今阳。
Xcode 在窗口的主編輯器區(qū)域打開(kāi)源文件师溅,外觀應(yīng)該類(lèi)似這樣:
main.m 中的 main 函數(shù)調(diào)用自動(dòng)釋放池 (autorelease pool) 中的 UIApplicationMain 函數(shù):
@autoreleasepool {
return
UIApplicationMain(argc,argv,nil,NSStringFromClass([HelloWorldAppDelegate
class]));
}
@autoreleasepool 語(yǔ)句支持“自動(dòng)引用計(jì)數(shù) (ARC)”系統(tǒng)。ARC
可自動(dòng)管理應(yīng)用程序的對(duì)象生命周期盾舌,確保對(duì)象在需要時(shí)一直存在墓臭,直到不再需要。
調(diào)用 UIApplicationMain 會(huì)創(chuàng)建一個(gè) UIApplication 類(lèi)的實(shí)例和一個(gè)應(yīng)用程序委托的實(shí)例(在本教程中妖谴,應(yīng)用程序委托是
HelloWorldAppDelegate窿锉,由“Single
View”模板提供)。應(yīng)用程序委托的主要作用是提供呈現(xiàn)應(yīng)用程序內(nèi)容的窗口膝舅,在應(yīng)用程序呈現(xiàn)之前嗡载,應(yīng)用程序委托也執(zhí)行一些配置任務(wù)。(委托是一種設(shè)計(jì)模式仍稀,在此模式中洼滚,一個(gè)對(duì)象代表另一個(gè)對(duì)象,或與另一個(gè)對(duì)象協(xié)調(diào)工作技潘。)
在 iOS
應(yīng)用程序中遥巴,窗口對(duì)象為應(yīng)用程序的可見(jiàn)內(nèi)容提供容器千康,協(xié)助將事件傳遞到應(yīng)用程序?qū)ο螅瑓f(xié)助應(yīng)用程序?qū)υO(shè)備的擺放方向做出響應(yīng)铲掐。窗口本身是不可見(jiàn)的拾弃。
調(diào)用 UIApplicationMain 也會(huì)掃描應(yīng)用程序的 Info.plist 文件。Info.plist
文件為信息屬性列表摆霉,即鍵和值配對(duì)的結(jié)構(gòu)化列表豪椿,它包含應(yīng)用程序的信息,例如名稱(chēng)和圖標(biāo)斯入。
查看屬性列表文件
·在項(xiàng)目導(dǎo)航器的“Supporting Files”文件夾中砂碉,選擇 HelloWorld-Info.plist。
Xcode 在窗口的編輯器區(qū)域打開(kāi) Info.plist 文件刻两,外觀應(yīng)該類(lèi)似這樣:
在本教程中增蹭,你不需要查看“Supporting Files”文件夾中的文件,因此可以在項(xiàng)目導(dǎo)航器中關(guān)閉此
文件夾來(lái)避免分散注意力磅摹。同樣的滋迈,點(diǎn)按“Supporting Files”文件夾圖標(biāo)旁邊的展示三角形以關(guān)閉該文件夾。
因?yàn)槟阋堰x取在項(xiàng)目中使用串聯(lián)圖户誓,所以 Info.plist
文件還包含應(yīng)用程序?qū)ο髴?yīng)該載入的串聯(lián)圖的名稱(chēng)饼灿。串聯(lián)圖包含對(duì)象、轉(zhuǎn)換以及連接的歸檔帝美,它們定義了應(yīng)用程序的用戶(hù)界面碍彭。
在“HelloWorld”應(yīng)用程序中,串聯(lián)圖文件命名為 MainStoryboard.storyboard(請(qǐng)注意 Info.plist
文件只顯示這名稱(chēng)的第一部分)悼潭。應(yīng)用程序啟動(dòng)時(shí)庇忌,載入MainStoryboard.storyboard,接著根據(jù)它對(duì)初始視圖控制器進(jìn)行實(shí)例化舰褪。視圖控制器是管理區(qū)域內(nèi)容的對(duì)象皆疹;而初始視圖控制器是應(yīng)用程序啟動(dòng)時(shí)載入的第一個(gè)視圖控制器。
“HelloWorld”應(yīng)用程序僅包含一個(gè)視圖控制器(具體來(lái)說(shuō)就是
HelloWorldViewController)≌寂模現(xiàn)在略就,HelloWorldViewController
管理由單視圖提供的一個(gè)區(qū)域的內(nèi)容。視圖是一個(gè)對(duì)象晃酒,它在屏幕的矩形區(qū)域中繪制內(nèi)容表牢,并處理由用戶(hù)觸摸屏幕所引起的事件。一個(gè)視圖也可以包含其他視圖掖疮,這些視圖稱(chēng)為分視圖初茶。當(dāng)一個(gè)視圖添加了一個(gè)分視圖后,它被稱(chēng)為父視圖,這個(gè)分視圖被稱(chēng)為子視圖恼布。父視圖螺戳、其子視圖以及子視圖的子視圖(如有的話)形成一個(gè)視圖層次。一個(gè)視圖控制器只管理一個(gè)視圖層次折汞。
注:“模型-視圖-控制器”(Model-View-Controller, MVC)
設(shè)計(jì)模式定義了應(yīng)用程序?qū)ο蟮娜N角色倔幼,“HelloWorld”應(yīng)用程序中的視圖和視圖控制器,體現(xiàn)了其中的兩種爽待,而第三種為模型對(duì)象损同。在 MVC
中,模型對(duì)象表示數(shù)據(jù)(例如日歷應(yīng)用程序中的待辦事項(xiàng)或繪圖程序中的圖形)鸟款,視圖對(duì)象知道如何顯示模型對(duì)象所表示的數(shù)據(jù)膏燃,控制器對(duì)象充當(dāng)模型和視圖的媒介。在“HelloWorld”應(yīng)用程序中何什,模型對(duì)象為字符串组哩,用來(lái)保存用戶(hù)輸入的名稱(chēng)。現(xiàn)在你不需要了解更多有關(guān)
MVC 的信息处渣,但最好開(kāi)始思考應(yīng)用程序中的對(duì)象如何扮演不同的角色伶贰。
在接下來(lái)的步驟,你要給由 HelloWorldViewController
管理的視圖添加三個(gè)分視圖罐栈,以創(chuàng)建視圖層次黍衙;這三個(gè)子視圖分別表示文本欄、標(biāo)簽和按鈕荠诬。
你可以在串聯(lián)圖中看到視圖控制器及其視圖的模樣琅翻。
查看串聯(lián)圖
·在項(xiàng)目導(dǎo)航器中選擇 MainStoryboard.storyboard。
Xcode 在編輯器區(qū)域打開(kāi)串聯(lián)圖柑贞。(串聯(lián)圖對(duì)象后面的區(qū)域望迎,即看起來(lái)像圖紙的區(qū)域,稱(chēng)為畫(huà)布凌外。)打開(kāi)默認(rèn)串聯(lián)圖后,工作區(qū)窗口看起來(lái)應(yīng)該類(lèi)似這樣:
串聯(lián)圖包括場(chǎng)景和過(guò)渡涛浙。場(chǎng)景代表視圖控制器康辑,過(guò)渡則表示兩個(gè)場(chǎng)景之間的轉(zhuǎn)換。
因?yàn)椤癝ingle
View”模板提供一個(gè)視圖控制器轿亮,應(yīng)用程序中的串聯(lián)圖只包含一個(gè)場(chǎng)景疮薇,沒(méi)有過(guò)渡。畫(huà)布上指向場(chǎng)景左側(cè)的箭頭是“initial scene
indicator”(初始場(chǎng)景指示器)我注,它標(biāo)識(shí)出應(yīng)用程序啟動(dòng)時(shí)應(yīng)該首先載入的場(chǎng)景(通常初始的場(chǎng)景就是初始視圖控制器)按咒。
在畫(huà)布上看到的場(chǎng)景稱(chēng)為“Hello World View Controller”,因?yàn)樗怯?HelloWorldViewController
對(duì)象來(lái)管理的但骨±撸“Hello World View Controller”場(chǎng)景由一些項(xiàng)目組成智袭,顯示在
Xcode大綱視圖(在畫(huà)布和項(xiàng)目導(dǎo)航器之間的面板)。現(xiàn)在掠抬,視圖控制器由以下項(xiàng)目組成:
·一個(gè)第一響應(yīng)器占位符對(duì)象(以橙色立方體表示)吼野。
“first
responder”是一個(gè)動(dòng)態(tài)占位符,應(yīng)用程序運(yùn)行時(shí)两波,它應(yīng)該是第一個(gè)接收各種事件的對(duì)象瞳步。這些事件包括以編輯為主的事件(例如輕按文本欄以調(diào)出鍵盤(pán))、運(yùn)動(dòng)事件(例如搖晃設(shè)備)和操作消息(例如當(dāng)用戶(hù)輕觸按鈕時(shí)該按鈕發(fā)出的消息)等等腰奋。本教程不會(huì)涉及第一響應(yīng)器的任何操作单起。
·名為 Exit 的占位符對(duì)象,用于展開(kāi)序列劣坊。
默認(rèn)情況下嘀倒,當(dāng)用戶(hù)使子場(chǎng)景消失時(shí),該場(chǎng)景的視圖控制器展開(kāi)(或返回)父場(chǎng)景——即轉(zhuǎn)換為該子場(chǎng)景的原來(lái)場(chǎng)景讼稚。不過(guò)括儒,Exit
對(duì)象使視圖控制器能夠展開(kāi)任意一個(gè)場(chǎng)景。
·HelloWorldViewController 對(duì)象(以黃色球體內(nèi)的淺色矩形表示)锐想。
串聯(lián)圖載入一個(gè)場(chǎng)景時(shí)帮寻,會(huì)創(chuàng)建一個(gè)視圖控制器類(lèi)的實(shí)例來(lái)管理該場(chǎng)景。
·一個(gè)視圖赠摇,列在視圖控制器下方(要在大綱視圖中顯示此視圖固逗,你可能要打開(kāi)“Hello World
View
Controller”旁邊的展示三角形)。
此視圖的白色背景就是在 Simulator 中運(yùn)行該應(yīng)用程序時(shí)所看到的背景藕帜。
注:應(yīng)用程序的窗口對(duì)象在串聯(lián)圖中并未表示出來(lái)烫罩。
畫(huà)布上,場(chǎng)景下方的區(qū)域稱(chēng)為場(chǎng)景臺(tái)∏⒐剩現(xiàn)在贝攒,場(chǎng)景臺(tái)顯示了視圖控制器的名稱(chēng),即“Hello World View
Controller”时甚。其他時(shí)候隘弊,場(chǎng)景臺(tái)可包含圖標(biāo),分別代表第一響應(yīng)器荒适、Exit 占位符對(duì)象和視圖控制器對(duì)象梨熙。