iOS main函數(shù)解析

我們都知道oc程序的入口是main函數(shù),如下:

int main(int argc, char * argv[]) {

@autoreleasepool {

return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

}

}

main函數(shù)的返回值是一個int類型 那么我們定義一個變量接收,并打印,看看這個參數(shù)是什么,能不能打印?

int main(int argc, char * argv[]) {

@autoreleasepool {

int a = UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

NSLog(@"a=%d",a);

return a;

}

}

? ? ? ?經(jīng)過測試,日志是沒有輸出的,說明UIApplicationMain是個死循環(huán),那么先看一下UIApplicationMain參數(shù)都是什么。

argh 代表的是長度,argv代表的是char 型數(shù)組,系統(tǒng)默認傳進來的.

然后主要分析后面兩個參數(shù)

// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no

// NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init.

UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName);

? ? ? ?我們查看一下UIApplicationMain方法定義,發(fā)現(xiàn)后面兩個參數(shù)都是NSString類型的,根據(jù)參數(shù)字面意思都是類名,第一個默認傳nil,那具體代表的是哪個類?我們先從最后一個參數(shù)看起,最后一個是一個代理類類名,即AppDelegate的類名,NSStringFromClass([AppDelegate class]等價于@“AppDelegate”,后面這個是一個代理類,這個代理是實現(xiàn)的是誰的代理呢?查看AppDelegate.h發(fā)現(xiàn)是實現(xiàn)的UIApplication的代理,再根據(jù)蘋果給出的注釋來看,當(dāng)這個類名為空時,先從Info.plist中讀取NSPrincipalClass屬性值,如果這個屬性值不存在,則使用UIApplication類,說明最后兩個參數(shù)一個是傳UIApplication單例類,一個是實現(xiàn)UIApplication的代理AppDelegate,所以UIApplicationMain也可以改為UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");其中第三個參數(shù)也可以是UIApplication類的子類。

我們再看一下UIApplicationMain死循環(huán)是什么?其實就是我們所說的runloop,那么內(nèi)部開啟死循環(huán)runloop的目的是什么?

1.保證當(dāng)前線程(主線程)不被退出

2.負責(zé)監(jiān)聽事件(包括觸摸事件、網(wǎng)絡(luò)等等)

ps:目前只知道這個兩種作用,有知道的可告解。

? ? ? ?以上是我對main函數(shù)的一點見解,如有不對的地方或有好的見解請?zhí)岢觯瑲g迎大家批評指正~~~

? ? ? ?雖然接觸iOS這么久,一直沒有研究過main函數(shù)的工作原理及參數(shù)意義,技術(shù)也一直沒能提高,寫下此文章記錄一下自己的學(xué)習(xí)成果。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容