官方解釋:This function is called in the main entry point to create the application object and the application delegate and set up the event cycle.
在iOS開發(fā)中柴灯,新建項(xiàng)目之后Xcode會(huì)自動(dòng)幫忙進(jìn)行了很多配置,這導(dǎo)致我們一上手就進(jìn)行開發(fā)砌庄,難免會(huì)對(duì)App啟動(dòng)流程的概念比較模糊初嘹,C語言中王凑,程序的入口是main函數(shù)锐极,這里什么是入口呢煤痕?應(yīng)用程序是從哪里開始運(yùn)行的呢阿宅?了解這個(gè)敌蚜,不僅是穩(wěn)固基礎(chǔ)桥滨,而且對(duì)整個(gè)應(yīng)用開發(fā)都很重要。
在Objective-C中:
由于Objective-C是面向?qū)ο蟮腃弛车,當(dāng)然C的特性都有齐媒,其中也有一個(gè)main函數(shù),這就是應(yīng)用程序的入口纷跛。打開 main.m
函數(shù)喻括,只有一行代碼,而其中就是我們的主角 UIApplicationMain(_:_:_:_:)
,這個(gè)函數(shù)會(huì)創(chuàng)建若干對(duì)象贫奠,使應(yīng)用得以運(yùn)行唬血。首先,該函數(shù)會(huì)創(chuàng)建一個(gè) UIApplication
單例唤崭。接著根據(jù)傳入的第四個(gè)參數(shù)創(chuàng)建相應(yīng)的類實(shí)例拷恨,并將其設(shè)置為應(yīng)用的委托對(duì)象。該對(duì)象會(huì)受到各種應(yīng)用委托消息浩姥,例如挑随,內(nèi)存過低、應(yīng)用關(guān)閉勒叠、進(jìn)入后臺(tái)運(yùn)行狀態(tài)或啟動(dòng)完畢兜挨。
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
在swift中:
swift中沒有main文件,當(dāng)然也就沒有main函數(shù)眯分,但是可以在Appdelegate.swift
文件中看到@UIApplicationMain
拌汇,當(dāng)然,這就是Xcode為我們配置好的弊决,其實(shí)swift也有main函數(shù)噪舀,或者說有這么個(gè)程序入口,只是@UIApplicationMain
幫我們自動(dòng)生成了飘诗,就不用自己去寫与倡,也看不到。一般不需要改動(dòng)昆稿,當(dāng)然也可以自己配置入口來創(chuàng)建一個(gè)UIApplication子類纺座。首先需要?jiǎng)h除 @UIApplicationMain
或者注釋掉,再新建一個(gè)main.swift
文件溉潭,添加以下代碼
import UIKit
UIApplicationMain(Process.argc, Process.unsafeArgv, nil,
NSStringFromClass(AppDelegate))
這里可以把nil換成自己的UIApplication子類净响,再次編譯問題解決少欺。