国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

【iOS】被忽略的main函數(shù)

2019-11-14 20:20:24
字體:
供稿:網(wǎng)友

    如同任何基于C的應(yīng)用程序,程序啟動的主入口點(diǎn)為iOS應(yīng)用程序的main函數(shù)。在iOS應(yīng)用程序,main函數(shù)的作用是很少的。它的主要工作是控制UIKit framework。因此,你在Xcode中創(chuàng)建任何新的項(xiàng)目都配備了一個默認(rèn)的主函數(shù)。除了少數(shù)特例外,你永遠(yuǎn)不應(yīng)該改變這個函數(shù)的實(shí)現(xiàn)。

 1 #import <UIKit/UIKit.h> 2  3 #import "AppDelegate.h" 4  5 int main(int argc, char * argv[]) 6 { 7     @autoreleasepool { 8         return UIapplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 9     }10 }

    UIApplicationMain函數(shù)有四個參數(shù),并使用這些參數(shù)來初始化應(yīng)用程序。你不應(yīng)該改變傳遞給這個函數(shù)的默認(rèn)值。盡管如此,了解他們的目的,以及他們是如何啟動的應(yīng)用程序,它也是有價(jià)值的。

函數(shù)原型:

1 UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *PRincipalClassName, NSString *delegateClassName);

參數(shù)解釋:

argc和argv:是ISO C標(biāo)準(zhǔn)的main函數(shù)的參數(shù),直接傳遞給UIApplicationMain進(jìn)行相關(guān)處理。參數(shù)包含應(yīng)用程序何時(shí)從系統(tǒng)啟動等信息。這些參數(shù)是由UIKit的基礎(chǔ)設(shè)施解析,否則可以忽略不計(jì)。 

principalClassName:這個參數(shù)標(biāo)識了應(yīng)用程序的類的名稱(該類必須繼承自UIApplication類)。這是負(fù)責(zé)運(yùn)行應(yīng)用程序的類。建議為這個參數(shù)傳nil。

delegateClassName:是應(yīng)用程序類的代理類。應(yīng)用程序的代理負(fù)責(zé)管理系統(tǒng)和你的代碼之間的高層次的互動。 Xcode的項(xiàng)目模板會自動將該參數(shù)設(shè)置為一個適當(dāng)?shù)闹怠?/span>

UIApplicationMain函數(shù)做的另一件事是加載應(yīng)用程序的主用戶界面文件。主界面文件包含應(yīng)用程序的用戶界面中顯示的初始視圖相關(guān)的對象。對于使用storyboard的應(yīng)用程序,這個函數(shù)會從你的storyboard的初始視圖控制器和您的應(yīng)用程序代理提供的窗口運(yùn)行。對于使用nib文件的應(yīng)用程序,該方法將nib文件內(nèi)容加載內(nèi)存中,但不會在你的應(yīng)用程序的窗口進(jìn)行運(yùn)行;您必須在應(yīng)用程序委托的方法中運(yùn)行如下方法。

- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(6_0);

一個應(yīng)用程序可以有一個主storyboard文件或者一個主nib文件,但它不能兼得。storyboards是首選的方式來指定你的應(yīng)用程序的用戶界面,但不支持在所有版本的iOS。應(yīng)用程序主storyboard的文件名應(yīng)該在應(yīng)用程序的Info.plist文件中的UIMainStoryboardFile鍵值中設(shè)定。(對于以nib文件為基礎(chǔ)的應(yīng)用程序,你的主nib文件的名稱需要在NSMainNibFile鍵值中設(shè)定。)通常情況下,Xcode會在你創(chuàng)建項(xiàng)目時(shí)創(chuàng)建相應(yīng)鍵的值,但可以根據(jù)需要進(jìn)行更改。 

如果主要nib文件存在,就會在nib文件對象里尋找Application對象和連接它的delegate。此函數(shù)會根據(jù)principalClassName創(chuàng)建UIApplication對象,然后根據(jù)delegateClassName創(chuàng)建一個delegate對象,并將UIApplication對象中的delegate屬性設(shè)置為delegate對象。 

在程序啟動時(shí):

當(dāng)您的應(yīng)用程序啟動(無論是進(jìn)入前臺還是后臺),需要使用如下方法并進(jìn)行相應(yīng)操作:

1 - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(6_0);2 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);

①檢查啟動選項(xiàng)字典中的內(nèi)容,查看程序啟動的方式,并做出適當(dāng)?shù)姆磻?yīng)。
②初始化應(yīng)用程序的關(guān)鍵數(shù)據(jù)結(jié)構(gòu)。
③準(zhǔn)備好你的應(yīng)用程序的窗口和視圖進(jìn)行顯示。
使用OpenGL ES的應(yīng)用程序不應(yīng)該使用這個方法來準(zhǔn)備他們的繪圖環(huán)境。相反,他們應(yīng)該推遲到- (void)applicationDidBecomeActive:(UIApplication *)application方法調(diào)用時(shí)啟動OpenGL ES繪圖方法。

 

如果您的應(yīng)用程序不會自動在啟動時(shí)加載一個主要storyboard或nib文件,您可以使用- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions編寫你的應(yīng)用程序的窗口顯示。對于同時(shí)支持縱向和橫向的應(yīng)用程序,始終設(shè)置主窗口的根視圖控制器在縱向方向。如果該設(shè)備是在一個不同的方向在啟動時(shí),系統(tǒng)會告訴根視圖控制器顯示窗口的旋轉(zhuǎn)信息,以保持正確的方向。

您的應(yīng)用程序- (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(NSDictionary *)launchOptions;- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;方法應(yīng)該總是??盡可能為輕量,以減少你的應(yīng)用程序的啟動時(shí)間。應(yīng)用預(yù)期將啟動并初始化自身,并開始處理不到5秒的事件。如果一個應(yīng)用程序沒有及時(shí)完成它的啟動周期,系統(tǒng)會殺死它。因此,有可能你的啟動慢下來(如接入網(wǎng)絡(luò))的任何任務(wù),應(yīng)在異步輔助線程執(zhí)行。

當(dāng)程序啟動到前臺,該系統(tǒng)還會調(diào)用- (void)applicationDidBecomeActive:(UIApplication *)application;方法來完成過渡到前臺。因?yàn)檫@種方法既在啟動時(shí)與從后臺過渡到前臺時(shí)被調(diào)用,使用它來執(zhí)行所共有的兩個轉(zhuǎn)變的任何任務(wù)。

當(dāng)程序在后臺運(yùn)行時(shí),除了準(zhǔn)備好對任何事件到達(dá)的處理,不應(yīng)該有太多的任務(wù)讓應(yīng)用程序做。 

 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 衡山县| 新余市| 太仓市| 大悟县| 偏关县| 马尔康县| 忻州市| 韶关市| 邹平县| 巨野县| 鄂伦春自治旗| 镇江市| 西乌珠穆沁旗| 视频| 江油市| 鲁山县| 崇州市| 肥城市| 麦盖提县| 防城港市| 颍上县| 乌鲁木齐市| 遂平县| 英吉沙县| 阿鲁科尔沁旗| 新余市| 泰和县| 九江县| 佛山市| 寿光市| 泸定县| 盐边县| 桂东县| 安龙县| 定安县| 盘山县| 城口县| 义乌市| 曲周县| 广东省| 泽州县|