因此,正如您所提到的,main.m
中的main()
函數是起點,然後調用UIApplicationMain()
。如果您檢查文檔,你會看到UIApplicationMain
有四個參數:
- ARGC,
- *的argv [],
- * principalClassName
- * delegateClassName。
其中前兩個只是從main()
傳遞的參數個數和變量列表。但是第三和第四個參數是指向NSStrings的指針。第三個參數指定哪個類應該是UIApplication
。除非您打算繼承UIApplication
,否則您需要爲第三個參數指定nil
。第四個參數指定哪個類應該是UIApplication的委託類,它將響應UIApplicationDelegate
協議中指定的任何內容。你不必直接與此淤泥,因爲它包含在所有的Xcode的模板:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
不要讓NSStringFromClass([AppDelegate class]))
位扔你。這只是指定第四個參數的一種奇妙方式,以便稍後更改名稱AppDelegate.m
以便正確的委託被調用。
UIApplication
開始main event loop並呼叫-application:didFinishLaunchingWithOptions:
,它的委託必須處理的方法之一。看看AppDelegate.m
,你會發現這個方法的一些模板代碼。在這裏,您可以開始定製,創造一些東西需要到位的UIView
的UIWindow
等情況下獲得創建前:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
self.window.rootViewController = self.viewController;
[self.window makeKeyAndVisible];
return YES;
}
所以,現在的應用程序窗口和根視圖控制器的定義,和應用程序已關閉並正在運行。更
所有這一切,並頗有幾分,出色這裏解釋:http://oleb.net/blog/2012/02/app-launch-sequence-ios-revisited/
僅供參考,'UIApplicationMain()'永遠不會返回。該應用程序通過調用exit()來終止。因此,在'main()'中'UIApplicationMain(argc,argv,nil,nil);'後面放置的任何東西都不會被執行。永遠不能。 –
呃。 @Dave如果那是真的,那真的會讓我失望。它回到BASIC的時代,我們只是把STOP放在GOSUB的中間! –