我們在學習一門開發語言時往往都是以Helloworld開始的,所以我就以Helloworld來開始我的iphone開發之旅並學習iphone應用程式的架構及生命週期。
開啟xcode建立一個基於UIView的項目。項目名為Helloworld,開啟ViewController.xib檔案,我們需要一個Labe控制項,按住滑鼠突入一個Label,雙擊該Label,輸入Helloworld。好了就這麼簡單,這時可以編譯運行了,如果不出意外的話,將看到下面的結果。
很簡單吧!這不是我們的目的,如果要開發出一款優秀的iphone應用,我們需要瞭解iphone應用程式架構和生命週期。
所有的iPhone應用程式都是基於UIKit架構構建而成的,因此,它們在本質上具有相同的核心架構。UIKit負責提供運行應用程式和協調使用者輸入及螢幕顯示所需要的關鍵對象。應用程式之間不同的地方在於如何配置預設對象,以及如何通過定製對象來添加使用者介面和行為。
從應用程式啟動到退出的過程中,UIKit架構負責管理大部分關鍵的基礎設施。iPhone應用程式不斷地從系統接收事件,而且必須響應那些事件。接收事件是UIApplication對象的工作,但是,響應事件則需要您的定製代碼來處理。為了理解事件響應需要在哪裡進行,我們有必要對iPhone應用程式的整個生命週期和事件周期有一些理解。本文的下面部分將描述這些周期,同時還對iPhone應用程式開發過程中使用的一些關鍵設計模式進行總結。
應用程式的生命週期
應用程式的生命週期是由發生在程式啟動到終止期間的一序列事件構成的。在iPhone OS中,使用者可以通過輕點Home螢幕上的表徵圖來啟動應用程式。在輕點表徵圖之後的不久,系統就會顯示一個過渡圖形,然後調用相應的main函數來啟動應用程式。從這個點之後,大量的初始化工作就會交給UIKit,由它裝載應用程式的使用者介面和準備事件迴圈。在事件迴圈過程中,UIKit會將事件分發給您的定製對象及響應應用程式發出的命令。當使用者進行退出應用程式的操作時,UIKit會通知應用程式,並開始應用程式的終止過程。
圖1-1顯示了一個簡化了的iPhone應用程式生命週期。這個框圖展示了發生在應用程式啟動到退出過程中的事件序列。在應用程式初始化和終止的時候,UIKit會嚮應用程式委託對象發送特定的訊息,使其知道正在發生的事件。在事件迴圈中,UIKit將事件派發給應用程式的定製事件處理器。有關初始化和終止事件的如何處理的資訊,將在隨後的“初始化和終止”部分進行討論;事件處理的過程則在“事件處理周期”部分介紹,在後面的章節也還有更為詳細的討論。
圖1-1 應用程式的生命週期
註:以上內容來自蘋果官方說明文檔
通過上述說明我們對iphone應用程式的組成及生命週期有了一個大致的瞭解。下面我們來擴充一下我們的Helloworld。
拖入兩個個Button控制項,分別雙擊滑鼠修改為Show和Clear。
開啟ViewController.h檔案,修改如下:
#import <UIKit/UIKit.h>@interface ViewController : UIViewController@property (nonatomic, retain) IBOutlet UITextView *text;- (IBAction)showText:(id)sender;- (IBAction)clearText:(id)sender;@end
再開啟ViewController.m檔案修改如下:
//// ViewController.m// HelloWorld//// Created by YQ-010 on 4/12/12.// Copyright (c) 2012 __MyCompanyName__. All rights reserved.//#import "ViewController.h"@implementation ViewController@synthesize text;- (void)didReceiveMemoryWarning{ [super didReceiveMemoryWarning]; // Release any cached data, images, etc that aren't in use.}- (IBAction)showText:(id)sender{ NSString *hello = [[NSString alloc] initWithFormat:@"Hello,world!"]; self.text.text = hello; [hello release];}- (IBAction)clearText:(id)sender{ NSString *nullText = [[NSString alloc] initWithFormat:@""]; self.text.text = nullText; [nullText release];}#pragma mark - View lifecycle- (void)viewDidLoad{ [super viewDidLoad];// Do any additional setup after loading the view, typically from a nib.}- (void)viewDidUnload{ self.text = nil; [super viewDidUnload]; // Release any retained subviews of the main view. // e.g. self.myOutlet = nil;}- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated];}- (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated];}- (void)viewWillDisappear:(BOOL)animated{[super viewWillDisappear:animated];}- (void)viewDidDisappear:(BOOL)animated{[super viewDidDisappear:animated];}- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation{ // Return YES for supported orientations if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } else { return YES; }}- (void) dealloc{ [text release]; [super dealloc];}@end
我們為兩個按鈕分別說明了一個響應,當我們按下按鈕時,就會執行我們設定的showText和clearText函數。不要忘了將按鈕和我們的File's Owner建立串連。編譯運行:
怎麼樣有了互動之後是不是不一樣了,這時我們也許會對,按鈕的事件處理有點疑惑,不用擔心,我們下次就會學到。
就寫這麼多,有什麼問題請留言,大家一起學習交流!
說明:轉載請註明出處!