我們都知道oc程序的入口是main函數(shù)糕篇,如下:
int main(int argc, char * argv[]) {
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
main函數(shù)的返回值是一個(gè)int類型 那么我們定義一個(gè)變量接收安聘,并打印慈缔,看看這個(gè)參數(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)過測(cè)試茫叭,日志是沒有輸出的状勤,說明UIApplicationMain是個(gè)死循環(huán),那么先看一下UIApplicationMain參數(shù)都是什么畏铆。
argh 代表的是長度雷袋,argv代表的是char 型數(shù)組吉殃,系統(tǒng)默認(rèn)傳進(jìn)來的.
然后主要分析后面兩個(gè)參數(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)后面兩個(gè)參數(shù)都是NSString類型的,根據(jù)參數(shù)字面意思都是類名蛋勺,第一個(gè)默認(rèn)傳nil,那具體代表的是哪個(gè)類瓦灶?我們先從最后一個(gè)參數(shù)看起,最后一個(gè)是一個(gè)代理類類名抱完,即AppDelegate的類名贼陶,NSStringFromClass([AppDelegate class]等價(jià)于@“AppDelegate”,后面這個(gè)是一個(gè)代理類,這個(gè)代理是實(shí)現(xiàn)的是誰的代理呢碉怔?查看AppDelegate.h發(fā)現(xiàn)是實(shí)現(xiàn)的UIApplication的代理烘贴,再根據(jù)蘋果給出的注釋來看,當(dāng)這個(gè)類名為空時(shí)撮胧,先從Info.plist中讀取NSPrincipalClass屬性值桨踪,如果這個(gè)屬性值不存在,則使用UIApplication類芹啥,說明最后兩個(gè)參數(shù)一個(gè)是傳UIApplication單例類锻离,一個(gè)是實(shí)現(xiàn)UIApplication的代理AppDelegate,所以UIApplicationMain也可以改為UIApplicationMain(argc, argv, @"UIApplication", @"AppDelegate");其中第三個(gè)參數(shù)也可以是UIApplication類的子類墓怀。
我們?cè)倏匆幌耈IApplicationMain死循環(huán)是什么?其實(shí)就是我們所說的runloop,那么內(nèi)部開啟死循環(huán)runloop的目的是什么汽纠?
1.保證當(dāng)前線程(主線程)不被退出
2.負(fù)責(zé)監(jiān)聽事件(包括觸摸事件、網(wǎng)絡(luò)等等)
ps:目前只知道這個(gè)兩種作用傀履,有知道的可告解虱朵。
? ? ? ?以上是我對(duì)main函數(shù)的一點(diǎn)見解,如有不對(duì)的地方或有好的見解請(qǐng)?zhí)岢銎『簦瑲g迎大家批評(píng)指正~~~
? ? ? ?雖然接觸iOS這么久卧秘,一直沒有研究過main函數(shù)的工作原理及參數(shù)意義,技術(shù)也一直沒能提高官扣,寫下此文章記錄一下自己的學(xué)習(xí)成果翅敌。