成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入iPhone開發:應用程序核心探秘

移動開發 iOS
每個iPhone應用程序都基于UIKit框架而構建,因此擁有同樣的核心架構,本文提供了一個核心應用程序架構和高級別定制點方面的總體描述來幫助你做出決定。

每個iPhone應用程序都基于UIKit框架而構建,因此擁有同樣的核心架構。UIKit提供運行應用程序的關鍵對象并且協調用戶輸入處理和屏幕內容顯示。應用程序彼此之間區分開來的地方在于如何配置這些缺省對象和它們如何把自定義對象整合到它們的應用程序用戶界面和行為中。

51CTO推薦專題:iPhone應用程序開發初探

盡管定制你的應用程序用戶界面和基本行為發生在你的自定義代碼中,仍然有很多定制必須使用在應用程序的***層。因為這些應用層的定制影響了你的應用程序和系統以及其它安裝程序之間的交互方式,理解什么時候該采取行動而什么時候默認行為已經足夠這一點很重要。本文提供了一個核心應用程序架構和高級別定制點方面的總體描述來幫助你做出決定。

核心應用程序架構

從你的程序被用戶啟動,到它退出,UIKit框架管理著大多數應用程序關鍵基礎結構。一個iPhone應用程序不斷從系統中接收事件并必須響應這些事件。接收事件是UIApplication 對象的工作但是響應這些事件是你自定義代碼的責任。為了理解你在哪些地方需要響應事件,其實,這對理解一點整個應用程序生命周期和事件循環也有幫助。下面的章節描述了這些周期并且還提供了一些貫穿iPhone應用程序開發的核心設計模式的總結。(相關推薦:專訪最牛iPhone開發團隊:走進移動開發

應用程序生命周期

應用程序生命周期構成發生在你的應用程序啟動和退出期間的事件序列。在iPhone 操作系統中, 用戶通過點擊桌面上的菜單啟動你的應用程序。在點擊發生之后的短時間內,系統顯示一些過渡圖片并開始通過調用main函數啟動你的應用程序。從這一點開始,一大堆的初始化工作被移交給UIKit,它將加載應用程序的用戶界面并準備好它的事件循環。在事件循環期間,UIKit 協調你自定義對象的事件交付和應用程序發出命令的響應。當用戶執行一個動作會讓你的應用程序退出時,UIKit通知你的應用程序并開始這個結束過程。

圖1-1 描繪了一個iPhone應用程序的簡單生命周期。這個圖顯示了應用程序啟動到退出期間發生的事件序列。在初始化和結束階段,UIKit發送特定的消息給應用程序代理對象以便其知道發生了什么。在事件循環階段,UIKit分發事件給你的應用程序自定義事件處理器。處理初始化和結束事件在“Initialization and Termination,” 中描述,而事件處理過程在“The Event-Handling Cycle” 中介紹,在后面的章節將覆蓋更多的細節。

圖1-1  應用程序生命周期 
圖 1-1  應用程序生命周期

Main函數

在iPhone應用程序里, main函數功能被最小化了。大部分實際工作是在UIApplicationMain 函數中完成的。 當你在Xcode中開始一個新的應用程序項目時,每個項目模版都提供了一個標準main函數實現如同在 “Handling Critical Application Tasks.”里的那個。Main函數只做了三件事: 創建了一個自釋放池(autorelease pool),調用UIApplicationMain,然后釋放autorelease pool。 除了很少的特例,你不應該修改它。

  1. iPhone應用程序的main函數  
  2. #import <UIKit/UIKit.h> 
  3.  
  4. int main(int argc, char *argv[])  
  5.    
  6. {  
  7.    
  8.     NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];  
  9.    
  10.     int retVal = UIApplicationMain(argc, argv, nil, nil);  
  11.    
  12.     [pool release];  
  13.    
  14.     return retVal;  
  15.    

注意: 自釋放池用在內存管理中。它是一個Cocoa機制用來延遲在一個函數體內創建的對象的釋放。更多信息參見Memory Management Programming Guide for Cocoa。對于和自釋放池相關的iPhone應用程序特定的內存管理指南,參見“Allocating Memory Wisely.”

上述列表中的中心部分UIApplicationMain函數采用了4個參數并使用它們來初始化應用程序。盡管你沒必要更改傳入參數的默認值,還是值得解釋一下它們起動應用程序時的用途。除了argc 和 argv 參數外,這個函數采用兩個字符串參數來識別基本類(也就是,應用程序對象類)和應用程序代理類。如果這個基本類字符串為空,UIKit使用UIApplication類作為缺省值。

如果應用程序代理類為空,UIKit假設它為從你的應用程序主nib文件加載的對象其中之一(對于使用Xcode模版創建的應用程序)。 設置這些參數任意一個為非空數值將導致UIApplicationMain 函數在應用程序啟動時創建一個相應類實例并為聲明的目的使用它。這樣,如果你的應用程序使用一個自定義的UIApplication子類(不推薦這樣,但是當然是可能的),你將在第三個參數中指定你自定義類的名字。

#p#

應用程序代理

監控你的應用程序的高層行為是應用程序代理對象的職責,也就是你提供的自定義對象。代理是用來避免子類化復雜UIKit對象的一個機制,比如缺省的UIApplication對象。和使用子類化以及重寫父類方法相反,你無需修改就可以使用這個復雜對象而把自定義的代碼放在代理類中。當感興趣的事件發生時,這個復雜對象發送消息給你的代理對象。你可以使用這些“鉤子”來執行自定義代碼并實現你需要的行為。

重要: 這個代理設計模式是用來節約你創建應用程序的時間和精力的。所以理解這個模式很重要。想對iPhone應用程序采用的關鍵設計模式有個總體了解,請參見“Fundamental Design Patterns.” 關于代理和其他UIKit設計模式的更詳細的描述,請參見Cocoa Fundamentals Guide.

應用程序代理對象負責處理一些關鍵的系統消息而且在每個iPhone應用程序中必須存在。這個對象可以是任何你喜歡的類實例,只要它采用了UIApplicationDelegate 協議。 這個協議的方法定義了應用程序生命周期掛載的鉤子,同時也是你實現自定義行為的途徑。盡管你不需要實現所有的方法,每個應用程序代理應該實現在“Handling Critical Application Tasks.”中描述的方法。

主Nib文件

另外一個初始化時期發生的任務是加載應用程序的主nib文件。如果應用程序信息property list (Info.plist) 文件包含了NSMainNibFile關鍵值, 作為初始化過程的一部分,UIApplication 對象加載這個關鍵值指定的nib文件。主nib文件是為你自動加載的唯一nib文件;但是,你可以按照需要加載其他的nib文件。

Nib 文件是基于磁盤的資源文件,保存了一個或多個對象的一份快照。 一個iPhone應用程序的主nib文件通常包含一個窗口對象,應用程序代理對象,和可能一個或多個其他管理這個窗口的關鍵對象。加載一個nib文件重新構成nib文件中的對象,從它的磁盤表示轉換成一個實際的可以被你的應用程序操作的內存版本。

從nib文件中加載的對象和你編程序創建的對象沒有區別。不過,對于用戶界面而言,圖形化的創建和用戶界面相關聯的對象并存放在nib文件中(使用Interface Builder)比編程實現要簡便直觀得多。

#p#

事件處理循環

當UIApplicationMain 函數初始化了應用程序之后,它起動必要的基礎組件來管理這個應用程序的事件和繪制循環,這在圖Figure 1-2中描述。當用戶和設備交互時,iPhone OS 偵測觸摸事件并把它們放到應用程序事件隊列中。UIApplication對象的事件處理組件從事件隊列頂部提取每個事件并遞交給最合適的對象來處理它。比如,一個發生在一個按鈕上的觸摸事件將會被遞交給相應的按鈕對象。事件也可以被遞交給控制器對象(controller objects)和其他不是直接負責處理該觸摸事件的對象。

圖1-2  事件和繪畫循環 
圖 1-2  事件和繪畫循環

在iPhone OS 多點觸摸事件模型中,觸摸數據被包裝在一個簡單的事件對象中(UIEvent)。為了跟蹤單獨的觸摸動作,事件對象中包含了觸摸對象(UITouch),每一個代表一個手指觸摸了屏幕。當這個用戶把手指放在屏幕上,并四處移動它們,***從屏幕上移開,系統會在相應的觸摸對象中報告每個手指的變化。

當應用程序啟動時,系統為這個應用程序創建一個進程和線程。這個初始線程成為應用程序主線程, UIApplication 對象就在這里建立主運行循環(main run loop)并配置應用程序的事件處理編碼。圖1-3 顯示了事件處理編碼和主運行循環之間的關系。系統發送的觸摸事件被排隊直到它們能被應用程序的主循環處理。

在主運行循環中處理事件 
圖1-3  在主運行循環中處理事件

注意: 一個運行循環監控一個給定的執行線程的輸入源。當一個輸入源有數據處理時,這個運行循環喚醒線程并把控制權派發給輸入源處理器。當處理完成時,控制權返回運行循環,繼續下一個事件或者如果沒有什么事情做的話就讓這個線程休眠。你可以安裝你自己的輸入源,包括端口和時鐘,在一個運行循環中使用基礎框架中的NSRunLoop 類。

UIApplication用一個輸入源對象配置主運行循環來處理觸摸事件,把它們分發給合適的響應者對象。一個響應者對象是從UIResponder 類繼承而來并且實現了一個或多個處理觸摸事件不同階段的方法。應用程序中的響應者對象包括UIApplication實例,UIWindow,UIView,和所有UIView子類。 應用程序通常分發事件給代表應用程序的主窗口的UIWindow 對象。這個窗口對象,依次,轉發這個事件給它的***響應者first responder,這通常是發生觸摸事件的視圖對象(UIView)。

除了定義處理事件的方法之外,UIResponder類還定義了響應者鏈的程序結構,這是一個協同事件處理的Cocoa機制。響應者鏈是應用程序中的一個響應者對象連接序列,通常從***響應者開始。如果***響應者對象不能處理這個事件,它傳遞給響應鏈中的下一個。這個消息繼續回溯響應鏈-給更高級別的響應者對象比如窗口,應用程序,和應用程序代理-直到事件被處理。如果事件最終仍然未被處理,則被拋棄。

處理事件的響應者對象傾向于在移動中設置一系列程序動作而導致應用程序重畫所有或它的用戶界面的一部分(以及其它可能的輸出,比如播放聲音)。例如,一個控制器對象 (也就是,一個UIControl子類),通過發送一個動作消息給另外一個對象來處理一個事件,通常這個控制器管理著當前激活視圖集。當處理當前消息時,這個控制器可能改變用戶界面或者調整視圖位置,需要部分視圖重新繪制自己。當這個發生時,視圖和繪圖基礎組件接管并以可能的最有效率的方式來處理這些必要的重繪事件。

基本設計模式

UIKit框架的設計融合了許多Mac OS X上的Cocoa應用程序創建的設計模式。理解這些模式對于創建iPhone應用程序是關鍵的,所以值得花一些時間來了解它們。下面提供了一個這些設計模式的總體描述:

基本設計模式

 

 

【編輯推薦】

  1. iPhone應用開發實戰全解
  2. 專題:iPhone應用程序開發初探 
  3. 專訪最牛iPhone開發團隊:走進移動開發 
責任編輯:王曉東 來源: CSDN博客
相關推薦

2011-07-26 09:41:23

iPhone xcode Mac OS X

2011-08-12 14:54:45

iPhone委托

2011-08-05 13:49:53

iPhone 應用 開發

2011-07-21 10:47:37

iPhone Cocoa 委托

2011-07-26 11:13:15

iPhone PXL

2011-08-10 09:31:33

開發iPhone應用程

2010-03-01 17:53:22

Python應用程序

2011-04-29 10:46:32

iPhone開發入門iPhoneiOS

2011-08-17 16:16:29

iPhone應用程序啟動過程

2011-08-17 16:12:20

iPhone應用程序

2010-02-06 16:02:57

Android 應用程

2010-08-18 10:13:55

IntentAndroid

2010-08-04 09:43:28

Flex應用程序

2011-07-20 15:58:58

iPhone 應用程序 生命周期

2011-07-21 15:56:32

iPhone 截屏

2011-07-27 17:30:40

iPhone Locate 定位

2011-07-19 14:36:32

iPhone

2009-12-23 10:18:21

ADO.NET 應用程

2009-11-16 17:33:47

2010-01-25 17:14:44

Android應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 狠狠干美女 | 国产精品欧美日韩 | 综合激情网 | 精品中文视频 | 国产一区二区三区四区区 | 日韩精品中文字幕一区二区三区 | 久久亚洲一区 | 亚洲天天干 | 国产成人精品免费视频大全最热 | 91av免费看 | 九色在线视频 | 久久久久国产精品一区二区 | 日韩国产高清在线观看 | 欧美男男videos | 九九导航 | 黄色网址免费看 | 久久的色 | 一区二区在线免费观看 | 精品三级在线观看 | 亚洲成人精选 | 久久久九九九九 | 日本在线视频一区二区 | 久久99久久98精品免观看软件 | 国外成人在线视频网站 | 综合色久 | 国产精品久久久精品 | 99re6在线视频| 日韩国产一区二区三区 | 狼色网 | 99色视频 | 91精品国产乱码久久久久久久 | 人人射人人草 | 国产午夜精品一区二区三区四区 | 欧美一卡二卡在线观看 | 国产免费一区二区 | 欧美一区二区三 | 欧美日韩国产精品一区 | 青娱乐一区二区 | 男女精品网站 | 精品国产乱码一区二区三 | 欧美一级在线观看 |