2.2.4 類
HelloWorld項(xiàng)目的核心由兩個(gè)重要的類構(gòu)成。HelloWorldAppDelegate類用于處理應(yīng)用程序中的全局事件和狀態(tài)變化,而HelloWorldScene類則包含了所有用于顯示“Hello World”標(biāo)簽的代碼。
1.HelloWorldAppDelegate類
每個(gè)iOS應(yīng)用程序都有一個(gè)實(shí)現(xiàn)UIApplicationDelegate協(xié)議的AppDelegate類。在我們的HelloWorld項(xiàng)目中,用于實(shí)現(xiàn)協(xié)議的類叫做HelloWorldAppDelegate,這種命名模式對(duì)于任意一個(gè)新項(xiàng)目都是通用的:項(xiàng)目名+AppDelegate。從現(xiàn)在起,我會(huì)將HelloWorldAppDelegate簡(jiǎn)稱為AppDelegate,因?yàn)檫@是在每個(gè)iOS應(yīng)用程序中都存在的通用概念。
AppDelegate類通過(guò)在特定時(shí)間點(diǎn)從iOS接收消息來(lái)追蹤應(yīng)用程序的狀態(tài)變化。例如,你可以通過(guò)它來(lái)處理諸如用戶接到來(lái)電或內(nèi)存不足時(shí)應(yīng)用程序需要采取的措施。應(yīng)用程序會(huì)收到的第一個(gè)消息會(huì)是applicationDidFinishLaunching方法,這是所有代碼的起始位置,開(kāi)發(fā)者應(yīng)該在該方法中添加cocos2d的所有初始化代碼。
欲知AppDelegate中更多不同的方法、對(duì)應(yīng)的功能以及消息發(fā)送時(shí)間的相關(guān)內(nèi)容,請(qǐng)查閱蘋(píng)果公司官方關(guān)于UIApplicationDelegate協(xié)議的參考文檔http://developer.apple.com/ iphone/library/documentation/uikit/reference/UIApplicationDelegate_Protocol。
注意:
鑒于剛剛提到的應(yīng)用程序的啟動(dòng)問(wèn)題,我想應(yīng)該再提一下應(yīng)用程序的關(guān)閉問(wèn)題。你最終可能對(duì)AppDelegate中的dealloc方法心存疑惑:它從沒(méi)被調(diào)用過(guò)!而且任何設(shè)置在AppDelegate的dealloc方法中的斷點(diǎn)也完全不起作用!事實(shí)上,當(dāng)iOS終止一個(gè)應(yīng)用程序時(shí),它會(huì)將應(yīng)用程序占用的所
所有內(nèi)存清理干凈,從而加快應(yīng)用程序的關(guān)閉速度。這也是為什么AppDelegat的dealloc方法內(nèi)中的代碼從不被運(yùn)行的原因。此外,手動(dòng)調(diào)用dealloc方法是一個(gè)很不好的習(xí)慣。如果需要在應(yīng)用程序終止前運(yùn)行一些代碼,可以將這些代碼添加到applicationWillTerminate方法中。如果你的目標(biāo)系統(tǒng)是iOS 4或更高版本,就應(yīng)將代碼添加到applicationDidEnterBackground方法中。
在多數(shù)情況下,在cocos2d初始化過(guò)程中只有3處代碼需要進(jìn)行修改:
[[CCDirector sharedDirector]
setDeviceOrientation:CCDeviceOrientationLandscapeLeft];
[[CCDirector sharedDirector] setAnimationInterval:1.0/60];
[[CCDirector sharedDirector] setDisplayFPS:YES];
下面我將對(duì)它們逐個(gè)地加以解釋。