程序的啟動(dòng)
main 函數(shù)
main 函數(shù)中,首先實(shí)例化了自動(dòng)釋放池缨该,因?yàn)?iOS 和 Cocos2D-X 的內(nèi)存管理方式都是引用計(jì)數(shù)偎行,這個(gè)自動(dòng)釋放池貫穿著整個(gè)程序的生命周期,然后接下來給 UIApplicationMain 傳入命令行參數(shù)以啟動(dòng)程序贰拿,注意 UIApplicationMain 的最后一個(gè)參數(shù):
int retVal = UIApplicationMain(argc, argv, nil, @"AppController");
@"AppController" 表示要進(jìn)入名為 AppController 這個(gè)類蛤袒,也就是我們這個(gè) iOS 程序的應(yīng)用程序委托,
tests/cpptests/proj.ios/Classes/testsAppDelegate.h
tests/cpptests/proj.ios/Classes/testsAppDelegate.mm
這兩個(gè)文件定義了 AppController 類膨更,注意實(shí)現(xiàn)文件的后綴 mm 妙真,表示這個(gè)文件是以 OC 和 C++ 混寫的。這個(gè)類實(shí)現(xiàn)了 UIApplicationDelegate 協(xié)議荚守,是我們整個(gè) iOS 程序的委托(注意與 Cocos2D 程序的委托區(qū)分)珍德。
AppController (iOSApplicationDelegate)
在 iOS 應(yīng)用程序委托中,我們主要關(guān)注一下 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法矗漾。這是程序啟動(dòng)之后的回調(diào)方法锈候。
這個(gè)方法大概做了這些事:
- 首先取得了 Cocos2D 的 Application ,這是一個(gè)單例敞贡;
- 實(shí)例化一個(gè) UIWindow 并顯示泵琳;
- 實(shí)例化一個(gè) RootViewController 并賦給 UIWindow 的 rootViewController ;
- 處理 GLView 并分別綁定到 rootViewController 和 Director 上嫡锌;
- 調(diào)用 cocos2d::Application 的 run 方法,表示我們的 Cocos2D 程序啟動(dòng)了琳钉。
在 AppController 中的回調(diào)函數(shù)中势木,我們可以加一些關(guān)于程序啟動(dòng)、進(jìn)入后臺(tái)等一些處理歌懒,在 RootViewController 中啦桌,我們可以做一些關(guān)于內(nèi)存警告、屏幕方向的處理及皂。
現(xiàn)在甫男,Cocos2D 程序也啟動(dòng)了,類似于 iOS 程序验烧,Cocos2D 程序也有自己的應(yīng)用程序委托板驳。
AppDelegate (Cocos2DApplicationDelegate)
在
tests/cpp-tests/Classes/AppDelegate.h
tests/cpp-tests/Classes/AppDelegate.cpp
中定義了 Cocos2D 應(yīng)用程序委托:AppDelegate ,注意實(shí)現(xiàn)文件的后綴 cpp 碍拆,表示我們現(xiàn)在已經(jīng)“離開了” iOS 的 “OC 世界”若治,來到了 Cococ2D-X 的 “CPP 世界”慨蓝,當(dāng)然,之后我們也可以定義自己的 mm 文件來調(diào)用 iOS 的 API 端幼。
在 AppDelegate 類中礼烈,也有關(guān)于程序啟動(dòng)、進(jìn)入后臺(tái)等的相關(guān)回調(diào)方法婆跑,同時(shí)有一個(gè)私有成員變量 : _testController 此熬。我們依然關(guān)注一下程序啟動(dòng)的回調(diào)方法 :bool AppDelegate::applicationDidFinishLaunching() 看看在程序啟動(dòng)之后都做了什么。
- 初始化 Director滑进;
- 開啟 FPS 顯示模式用于調(diào)試犀忱,設(shè)置幀率;
- 獲取 FileUtils 單例并加入資源搜索路徑郊供;
- 獲取 testController 單例(調(diào)用 getInstance() 方法 峡碉,其中 getInstance() 方法中調(diào)用了 TestController 的構(gòu)造方法)。