ios 應用剖析

在建立HelloWorld的過程當中,生成了不少文件(展開Xcode左邊的項目導航視圖能夠看到,如圖2-8所示),它們各自的做用是什麼?彼此間又是怎樣的一種關係呢?app

圖2-8 項目導航視圖框架

如圖2-8所示,導航視圖下有HelloWorld、Frameworks和Products三個組。函數

在HelloWorld組中共有兩個類:AppDelegateViewController,以及一個組Supporting Files。 咱們主要的編碼工做就是在AppDelegateViewController這兩個類中進行的,它們的類圖如圖2-9所示。post

[+]查看原圖編碼

圖2-9 HelloWorld工程中的類圖spa

AppDelegate是應用程序委託對象,它繼承了UIResponder類,並實現了UIApplicationDelegate委託協議。UIResponder類可使子類AppDelegate具備處理相應事件的能力,而UIApplicationDelegate委託協議使AppDelegate可以成爲應用程序委託對象,這種對象可以響應應用程序的生命週期。相應地,AppDelegate的子類也能夠實現這兩個功能。code

ViewController類繼承自UIViewController類,它是視圖控制器類,在工程中扮演着根視圖和用戶事件控制類的角色。須要特別指出的是,ViewController.xib文件也是視圖控制文件,起描述做用,與ViewController配套存在。對象

AppDelegateViewController類與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組是工程將要生成的產品包。

相關文章
相關標籤/搜索