在建立HelloWorld的過程當中,生成了不少文件(展開Xcode左邊的項目導航視圖能夠看到,如圖2-8所示),它們各自的做用是什麼?彼此間又是怎樣的一種關係呢?app
圖2-8 項目導航視圖框架
如圖2-8所示,導航視圖下有HelloWorld、Frameworks和Products三個組。函數
在HelloWorld組中共有兩個類:AppDelegate
和ViewController
,以及一個組Supporting Files。 咱們主要的編碼工做就是在AppDelegate
和ViewController
這兩個類中進行的,它們的類圖如圖2-9所示。post
[+]查看原圖編碼
圖2-9 HelloWorld工程中的類圖spa
AppDelegate
是應用程序委託對象,它繼承了UIResponder
類,並實現了UIApplicationDelegate
委託協議。UIResponder
類可使子類AppDelegate
具備處理相應事件的能力,而UIApplicationDelegate
委託協議使AppDelegate
可以成爲應用程序委託對象,這種對象可以響應應用程序的生命週期。相應地,AppDelegate
的子類也能夠實現這兩個功能。code
ViewController
類繼承自UIViewController
類,它是視圖控制器類,在工程中扮演着根視圖和用戶事件控制類的角色。須要特別指出的是,ViewController.xib文件也是視圖控制文件,起描述做用,與ViewController
配套存在。對象
AppDelegate
和ViewController
類與main
代碼模塊的主函數存在一種直接的調用關係,下面咱們藉助UML時序圖來進行詳細說明,如圖2-10所示。繼承
圖2-10 HelloWorld啓動時序圖生命週期
能夠看到,在HelloWorld啓動過程當中,首先調用main.m代碼模塊的main()
主函數進行AppDelegate
的實例化,具體代碼以下所示:
int main(int argc,char*argv[]){@autoreleasepool{returnUIApplicationMain(argc, argv,nil,NSStringFromClass([AppDelegateclass]));}}
AppDelegate
類是應用程序委託對象,這個類中繼承的一系列方法在應用生命週期的不一樣階段會被回調。啓動HelloWorld時,首先會調用application:didFinishLaunchingWithOptions:
方法,該方法的代碼以下:
-(BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions {self.window =[[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];self.viewController =[[[ViewController alloc] initWithNibName:@"ViewController" bundle:nil] autorelease];self.window.rootViewController =self.viewController;[self.window makeKeyAndVisible];return YES;}
在該方法中,共作了3件事:實例化UIWindow
,實例化ViewController
,而後把ViewController
做爲根視圖控制器放到UIWindow
上。每個iOS應用都有一個UIWindow
對象,而每個UIWindow
對象上面都一個根視圖,它所對應的控制器爲根視圖控制器(ViewController
)。UIWindow
對象與根視圖UIView
之間的關係如圖2-11所示。在根視圖上,咱們能夠添加子視圖。各類控件(包括UIWindow
)都繼承了UIView
。
圖2-11 UIWindow
對象與根視圖
Supporting Files組共有4個文件。爲了便於你們理解,通過分析和提煉,咱們將各文件的做用以表的形式向你們總結說明,見表2-1。
表2-1 Supporting Files組文件說明表
文件名 | 說明 |
---|---|
HelloWorld-Info.plist | 工程屬性描述文件,它的命名必須是「工程名+Info.plist」 |
InfoPlist.strings | 工程本地化的字符串文件 |
main.m | 應用程序的入口程序文件,它不是一個類,其中只有一個main() 主函數,應用的運行都是由此開始 |
HelloWorld-Prefix.pch | 在這個文件中能夠引入一些頭文件,這樣工程中的其餘文件就不須要再引入了。它的命名必須是「工程名+ Prefix.pch」 |
Frameworks組包含工程裏引用到的框架或類庫,而Products組是工程將要生成的產品包。