西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁(yè)編程開發(fā)其它知識(shí) → iphone程序的生命周期分析

iphone程序的生命周期分析

相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:本站整理時(shí)間:2011/3/20 13:47:31字體大。A-A+

作者:佚名點(diǎn)擊:724次評(píng)論:1次標(biāo)簽: iphone

《KOF拳皇》iPhone|iPad1.01.00 最新版[ipa]
  • 類型:ios動(dòng)作射擊大。374.3M語(yǔ)言:中文 評(píng)分:6.9
  • 標(biāo)簽:
立即下載

   做iphone開發(fā)首先第一件就是得知道iphone程序的生命周期,說(shuō)白點(diǎn)就是當(dāng)點(diǎn)擊程序圖標(biāo)啟動(dòng)程序開始到退出程序整個(gè)使用運(yùn)行過(guò)程中底下的代碼都發(fā)生了什么,只有理解了這個(gè)才能游刃有余的掌握Iphone程序的開發(fā),否則在寫程序的時(shí)候有點(diǎn)渾渾僵僵不知所以然的感覺。首先忘記Xcode給我們生成的代碼模板,忘記xib忘記ib,我們親自一行一行來(lái)寫一個(gè)HelloWorld程序,雖然真正開發(fā)項(xiàng)目的時(shí)候并不需要這樣做Xcode模板和ib都會(huì)為我們做好這些打雜的事情,但是現(xiàn)在完全由我們自己來(lái)寫,放心這個(gè)程序是個(gè)非常的簡(jiǎn)單的HelloWorld 程序,代碼也很少總共加起來(lái)不過(guò)10幾行。

     在這之前我們先來(lái)看看object-c語(yǔ)言的關(guān)于這段協(xié)議代碼:

@protocol SimpleProtocol

-(void)doSomething:(NSString *)str;

@end

@interface SimpleClass:NSObject< SimpleProtocol >{

}

@end

@implementation SimpleClass

-(void) doSomething:(NSString *)str{ 

   NSLog(str);

}

@end

      這樣是一個(gè)簡(jiǎn)單的協(xié)議示例,類SimpleClasss實(shí)現(xiàn)了名為SimpleProtocol的協(xié)議。協(xié)議在其它語(yǔ)言里跟接口非常類似,記住這個(gè)協(xié)議的實(shí)現(xiàn),接下來(lái)會(huì)有用的。

      接下來(lái)用Xcode新建一個(gè)名為HelloWorld的Window-based Application類型的項(xiàng)目。大體上講一下項(xiàng)目的文件結(jié)構(gòu),由Xcode模板生成的項(xiàng)目主要包含Classes(HelloWorldAppdelegate.h和HelloWorldAppdelegate.m)、Other Sources(main.m和HelloWorld_Prefix.pch)、Resources(MainWindow.xib和HelloWorld-info.plist)、Frameworks(iphoneSDK提供的系統(tǒng)框架)、Products(HelloWorld.app)這幾部分。直接運(yùn)行這個(gè)工程會(huì)在模擬器里看到一個(gè)白色的顯示界面程序,由此可見沒寫一行代碼Xcode已經(jīng)給我們生成了一個(gè)很簡(jiǎn)單的項(xiàng)目模板。

      每一個(gè)iphone程序都包含一個(gè)UIApplication對(duì)象,它管理整個(gè)程序的生命周期,從加載第一個(gè)顯示界面開始,并且監(jiān)聽系統(tǒng)事件、程序事件調(diào)度整個(gè)程序的執(zhí)行。那么上面這個(gè)簡(jiǎn)單項(xiàng)目中的UIApplication對(duì)象在哪呢?在這個(gè)項(xiàng)目中我們找不到任何關(guān)于UIApplication的代碼,其實(shí)在項(xiàng)目中UIApplication對(duì)象是由UIApplicationMain方法初始化到內(nèi)存中,首先打開Other Sources文件夾下的main.m源文件,里面只包括了一個(gè)main方法,和所有的C程序一樣這個(gè)是程序入口。代碼如下:

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int retVal = UIApplicationMain(argc, argv, nil, nil);

    [pool release];

    return retVal;

}

      在main函數(shù)中第二行代碼UIApplicationMain(argc, argv, nil, nil);對(duì)UIApplication對(duì)象進(jìn)行了初始化,這個(gè)方法除了argc 和 argv 參數(shù)外,另外這個(gè)函數(shù)還有2個(gè)兩個(gè)字符串參數(shù)來(lái)識(shí)別UIApplication類和UIApplication代理類,在這里默認(rèn)是2個(gè)nil,第一個(gè)參數(shù)為nil就默認(rèn)把UIApplication類作為缺省值進(jìn)行初始化,可以在這里不填nil而是使用自己定義的UIApplication子類。至于第二個(gè)參數(shù)nil就設(shè)置為nil就把模板生成的HelloWorldAppdelegate類作為默認(rèn)值。這里有了UIApplication對(duì)象怎么又出來(lái)一個(gè)UIApplication代理類對(duì)象呢?這里需要說(shuō)明UIApplication對(duì)象說(shuō)是管理整個(gè)程序的生命周期其實(shí)它是什么具體的事情都不干,它只負(fù)責(zé)監(jiān)聽事件當(dāng)需要做實(shí)際工作的時(shí)候就交給UIApplication代理類去做,UIApplication相當(dāng)于傳令官負(fù)責(zé)只把命令傳達(dá)給UIApplication代理類這個(gè)士兵,然后由這個(gè)士兵真正去沖鋒陷陣,所以需要給UIApplication對(duì)象設(shè)置代理類。

      非常不好意思寫了一堆羅嗦的文字還沒有進(jìn)入正題,不過(guò)這些羅嗦還是非常有必要的,現(xiàn)在開始編寫我們的第一個(gè)iphone程序helloWorld。上面不是說(shuō)了要忘記代碼模板,忘記xib忘記Interfcae Builder嘛,這樣我們把模板自動(dòng)生成的部分刪除了,找到Other Sources文件下main.m刪除,找到Classes文件夾下的HelloWorldAppdelegate.h和HelloWorldAppdelegate.m刪除,把Resources文件夾下的MainWindow.xib刪除,還有一件事情一定要做那就是打開Resources文件夾下HelloWorld-info.plist,然后找到key為“Main nib file base name”刪除因?yàn)樵谏厦嫖覀円呀?jīng)刪除了MainWindow.xib,這樣就完成的工程的清理,變成了一個(gè)真正的空的工程沒有什么實(shí)現(xiàn)代碼。

      完成上面的清理工作后,接下來(lái)開著我們的編寫,首先新建程序入口main.m文件已經(jīng)main方法,程序從這里開始。。〈a如下:

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

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int retVal = UIApplicationMain(argc, argv, nil, @”SampleDelegate”);

    [pool release];

    return retVal;

}    

    NSAutoreleasePool內(nèi)存自動(dòng)釋放池這個(gè)干什么我就不說(shuō)了,你懂得的。這里主要看一下第二行UIApplicationMain(argc, argv, nil, nil);與模板生成的相比改成UIApplicationMain(argc, argv, nil, @”SampleDelegate”);這樣做我們?yōu)閁IApplication對(duì)象設(shè)置了名為SampleDelegate代理類,上面不是說(shuō)了UIApplication是不處理具體事情的,真正做事的是UIApplication代理類,這個(gè)名為SampleDelegate代理類就是我們需要具體寫代碼實(shí)現(xiàn)的,當(dāng)UIApplication初始化后就開始監(jiān)聽事件,根據(jù)不同的監(jiān)聽事件讓SampleDelegate代理類做不同的處理,比如顯示第一個(gè)顯示界面。

    新建名為SampleDelegate.m的類,在SampleDelegate.h輸入如下代碼:

@interface SampleDelegate : NSObject<UIApplicationDelegate> {

}

@end

注意到?jīng)]有,SampleDelegate: NSObject <UIApplicationDelegate>這個(gè)寫法是不是很眼熟 ,在看看最上面那段object-c語(yǔ)言的關(guān)于協(xié)議代碼,SimpleClass類需要實(shí)現(xiàn)SimpleProtocol協(xié)議定義的方法,這樣看來(lái)UIApplicationDelegate是一個(gè)協(xié)議定義,同樣SampleDelegate也需要實(shí)現(xiàn)UIApplicationDelegate中定義的方法,只是這個(gè)協(xié)議是系統(tǒng)定義好的(具體可以參看UIApplicationDelegate.h)而SimpleProtocol是我們自己定義的,但是要做的事情相同,就是SampleDelegate需要去實(shí)現(xiàn)這UIApplicationDelegate協(xié)議定義好的方法, 這些方法就是UIApplication對(duì)象監(jiān)聽到系統(tǒng)變化的時(shí)候通知UIApplication對(duì)象代理類SampleDelegate執(zhí)行的相應(yīng)方法。下面是SampleDelegate的實(shí)現(xiàn)代碼寫在SampleDelegate.m中

     注意到?jīng)]有,SampleDelegate: NSObject <UIApplicationDelegate>這個(gè)寫法是不是很眼熟 ,在看看最上面那段object-c語(yǔ)言的關(guān)于協(xié)議代碼,SimpleClass類需要實(shí)現(xiàn)SimpleProtocol協(xié)議定義的方法,這樣看來(lái)UIApplicationDelegate是一個(gè)協(xié)議定義,同樣SampleDelegate也需要實(shí)現(xiàn)UIApplicationDelegate中定義的方法,只是這個(gè)協(xié)議是系統(tǒng)定義好的(具體可以參看UIApplicationDelegate.h)而SimpleProtocol是我們自己定義的,但是要做的事情相同,就是SampleDelegate需要去實(shí)現(xiàn)這UIApplicationDelegate協(xié)議定義好的方法, 這些方法就是UIApplication對(duì)象監(jiān)聽到系統(tǒng)變化的時(shí)候通知UIApplication對(duì)象代理類SampleDelegate執(zhí)行的相應(yīng)方法。下面是SampleDelegate的實(shí)現(xiàn)代碼寫在SampleDelegate.m中:

@implementation SampleDelegate

- (void)applicationWillResignActive:(UIApplication *)application{}

- (void)applicationDidBecomeActive:(UIApplication *)application{}

- (void)applicationDidEnterBackground:(UIApplication *)application{}

- (void)applicationWillEnterForeground:(UIApplication *)application{}

- (void)applicationWillTerminate:(UIApplication *)application{}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application{}

- (void)applicationSignificantTimeChange:(UIApplication*)application{}

- (void)applicationDidFinishLaunching:(UIApplication*)application{}

- (void)application:(UIApplication*)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame{}

- (void)application:(UIApplication*)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration{}

- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url{

         return YES;

}

- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation{}

- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame{}

@end

現(xiàn)在來(lái)看協(xié)議中定義的這些需要實(shí)現(xiàn)的方法分別是什么作用:

1、- (void)applicationWillResignActive:(UIApplication *)application

說(shuō)明:當(dāng)應(yīng)用程序?qū)⒁敕腔顒?dòng)狀態(tài)執(zhí)行,在此期間,應(yīng)用程序不接收消息或事件,比如來(lái)電話了

2、- (void)applicationDidBecomeActive:(UIApplication *)application

說(shuō)明:當(dāng)應(yīng)用程序入活動(dòng)狀態(tài)執(zhí)行,這個(gè)剛好跟上面那個(gè)方法相反

3、- (void)applicationDidEnterBackground:(UIApplication *)application

說(shuō)明:當(dāng)程序被推送到后臺(tái)的時(shí)候調(diào)用。所以要設(shè)置后臺(tái)繼續(xù)運(yùn)行,則在這個(gè)函數(shù)里面設(shè)置即可

4、- (void)applicationWillEnterForeground:(UIApplication *)application

說(shuō)明:當(dāng)程序從后臺(tái)將要重新回到前臺(tái)時(shí)候調(diào)用,這個(gè)剛好跟上面的那個(gè)方法相反。

5、- (void)applicationWillTerminate:(UIApplication *)application

說(shuō)明:當(dāng)程序?qū)⒁顺鍪潜徽{(diào)用,通常是用來(lái)保存數(shù)據(jù)和一些退出前的清理工作。這個(gè)需要要設(shè)置UIApplicationExitsOnSuspend的鍵值。

6、- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

說(shuō)明:iPhone設(shè)備只有有限的內(nèi)存,如果為應(yīng)用程序分配了太多內(nèi)存操作系統(tǒng)會(huì)終止應(yīng)用程序的運(yùn)行,在終止前會(huì)執(zhí)行這個(gè)方法,通常可以在這里進(jìn)行內(nèi)存清理工作防止程序被終止

7、- (void)applicationSignificantTimeChange:(UIApplication*)application

說(shuō)明:當(dāng)系統(tǒng)時(shí)間發(fā)生改變時(shí)執(zhí)行

8、- (void)applicationDidFinishLaunching:(UIApplication*)application

說(shuō)明:當(dāng)程序載入后執(zhí)行

9、- (void)application:(UIApplication)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

說(shuō)明:當(dāng)StatusBar框?qū)⒁兓瘯r(shí)執(zhí)行

10、- (void)application:(UIApplication*)application willChangeStatusBarOrientation:

(UIInterfaceOrientation)newStatusBarOrientation

duration:(NSTimeInterval)duration

說(shuō)明:當(dāng)StatusBar框方向?qū)⒁兓瘯r(shí)執(zhí)行

11、- (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url

說(shuō)明:當(dāng)通過(guò)url執(zhí)行

12、- (void)application:(UIApplication*)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

說(shuō)明:當(dāng)StatusBar框方向變化完成后執(zhí)行

13、- (void)application:(UIApplication*)application didChangeSetStatusBarFrame:(CGRect)oldStatusBarFrame

說(shuō)明:當(dāng)StatusBar框變化完成后執(zhí)行

下圖是我總結(jié)的一個(gè)大概流程圖,不是很準(zhǔn)確但是基本上也說(shuō)明了整個(gè)過(guò)程,僅供參考。

    到這為止我們的這個(gè)程序運(yùn)行起來(lái)還是什么都沒有看到,確實(shí)我們也沒有寫具體的功能代碼,接下來(lái)我們要做的就是在屏幕上顯示“Hello World!”,首先知道一下要在屏幕上顯示,首先需要一個(gè)UIWindow對(duì)象,這個(gè)你可以認(rèn)為是一個(gè)電視機(jī),然后還需要往這個(gè)UIWindow對(duì)象里添加UIView對(duì)象, UIView相當(dāng)于電視上一幕一幕的畫面。通過(guò)上面的流程知道要在程序后顯示可以在applicationDidFinishLaunching方法中處理,這樣修改applicationDidFinishLaunching方法如下:

- (void)applicationDidFinishLaunching:(UIApplication*)application{

         UIWindow *window=[[UIWindow alloc]initWithFrame:[[UIScreen mainScreen] bounds]];

         SampleViewController *viewctrl=[[SampleViewController alloc]init];

         [window addSubview:viewctrl.view];

         [window makeKeyAndVisible];

}

上面的代碼中做了如下幾件事情:

<!--[if !supportLists]-->1、 <!--[endif]-->實(shí)例化了一個(gè)UIWindow對(duì)象

<!--[if !supportLists]-->2、 <!--[endif]-->實(shí)例化了SampleViewController對(duì)象

<!--[if !supportLists]-->3、 <!--[endif]-->把SampleViewController對(duì)象UIView對(duì)象添加到UIWindow對(duì)象中

<!--[if !supportLists]-->4、 <!--[endif]-->顯示UIWindow對(duì)象

看這段代碼我們并沒有直接實(shí)例化一個(gè)UIView對(duì)象然后添加給UIWindow對(duì)象而且通過(guò)SampleViewController對(duì)象,它是UIViewController子類負(fù)責(zé)視圖的顯示控制,非常的好用,在這里我們只是實(shí)現(xiàn)了loadView就夠了,我們只要簡(jiǎn)單的顯示一下“Hello World!”文字, 具體代碼如下:

@interface SampleViewController : UIViewController {}

@end

@implementation SampleViewController

-(void)loadView{

         UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]];

         contentView.backgroundColor = [UIColor blackColor];

         self.view = contentView;

         [contentView release];

         CGRect labelFrame = CGRectMake(40.0f, 200.0f, 240.0f, 60.0f);

         UILabel *frontLabel = [[UILabel alloc] initWithFrame:labelFrame];

         frontLabel.text = @"Hello World!";

         frontLabel.font = [UIFont fontWithName:@"Georgia" size:24.0f];

         frontLabel.textColor = [UIColor colorWithRed:0.82f green:1.0f blue:0.286f alpha:1.0f];

         frontLabel.backgroundColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.0f];

         [contentView addSubview:frontLabel];

         [frontLabel release];    

}

@end

到這里我們已經(jīng)完成的HelloWorld程序的編寫,點(diǎn)擊運(yùn)行就能看到如下的效果圖:

    拳皇97ol
    (14)拳皇97ol
    拳皇西西專區(qū)為您提供該游戲破解版輔助電腦版蘋果版刷金幣修改器等相關(guān)輔助下載助你在游戲中能夠玩的更加的愉快快來(lái)下載游戲體驗(yàn)吧游戲簡(jiǎn)介拳皇是樂道互動(dòng)旗下傳統(tǒng)格斗模式和副本養(yǎng)成玩法相結(jié)合的手游大作,擁有正版授權(quán),將拳皇中的經(jīng)典人物百分百還原。在體驗(yàn)熟悉的熱血格斗過(guò)程中,還能享受到悉心培養(yǎng)格斗家的樂趣同時(shí)精美的原畫和多種多樣精致的地圖也吸引了更多妹子加入這場(chǎng)精彩絕倫的戰(zhàn)斗中。游戲特色拳皇世界王者歸來(lái)游戲采...更多>>
    • 拳皇97OL安卓版V1.4.5 官方版

      02-07 / 187M

      推薦理由:SNK正版授權(quán)、李冰冰代言的真格斗手機(jī)游戲《拳皇97OL》安卓版正式公測(cè)啦!并且攜全新陣營(yíng)戰(zhàn)玩法與大家見面。
    • iOS拳皇97ol官方2.9.0 iPhone/iPad

      11-08 / 261.5M

      推薦理由:iOS拳皇97ol官方是一款熱血刺激的格斗扮演類手機(jī)游戲,本次西西給大家?guī)?lái)的是ios拳皇97ol官方版下載。iOS拳
    • 拳皇97ol 360版1.4.5安卓版

      12-01 / 184.0M

      推薦理由:拳皇97ol360版高度還原了原作中的人物角色,包括造型、招式、臺(tái)詞等細(xì)節(jié)都下足了功夫,而八神庵、草薙京、不
    • 拳皇97ol內(nèi)購(gòu)破解版V1.4.6 安卓版

      02-07 / 200.3M

      推薦理由:拳皇97ol內(nèi)購(gòu)破解版是一款熱血刺激的格斗扮演類手機(jī)游戲,本次西西給大家?guī)?lái)的是拳皇97ol內(nèi)購(gòu)破解版下載。
    • 拳皇97ol電腦版V1.3.4 官方最新版

      12-31 / 200.3M

      推薦理由:拳皇97OL電腦版是一款熱血激昂的經(jīng)典格斗類手機(jī)游戲,本次西西給大家?guī)?lái)的是拳皇97OL電腦版下載。游戲采用
    • 拳皇97ol刷鉆石燒餅修改器3.1 安卓

      05-01 / 970KB

      推薦理由:拳皇97ol刷鉆石燒餅修改器是該游戲的輔助工具,可以幫助玩家修改更多的鉆石等,使玩家輕松購(gòu)買裝備做任務(wù)。

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門評(píng)論

    最新評(píng)論

    發(fā)表評(píng)論 查看所有評(píng)論(1)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過(guò)審核才能顯示)