《電子技術應用》
您所在的位置:首頁 > 顯示光電 > 設計應用 > 深入理解iPhone委托模式兼談iPhone生命周期
深入理解iPhone委托模式兼談iPhone生命周期
摘要: 每個iPhone應用程序都有一個UIApplication,UIApplication是iPhone應用程序的開始并且負責初始化并顯示UIWindow,并負責加載應用程序的第一個UIView到UIWindow窗體中。
Abstract:
Key words :

  每個iPhone應用程序都有一個UIApplication,UIApplication是iPhone應用程序的開始并且負責初始化并顯示UIWindow,并負責加載應用程序的第一個UIView到UIWindow窗體中。UIApplication的另一個任務是幫助管理應用程序的生命周期,而UIApplication通過一個名字為UIApplicationDelegate的代理類來履行這個任務。盡管UIApplication會負責接收事件,而UIApplicationDelegate則決定應用程序如何去響應這些事件,UIApplicationDelegate可以處理的事件包括應用程序的生命周期事件(比如程序啟動和關閉)、系統事件(比如來電、記事項警告),本文會介紹如何加載應用程序的UIView到UIWindow以及如何利用UIApplicationDelegate處理系統事件。

  通常對于UIApplication讀者是沒必要修改它的,只需要知道UIApplication接收系統事件即可,而如何編寫代碼來處理這些系統事件則是程序員的工作。處理系統事件需要編寫一個繼承自UIApplicationDelegate接口的類,而UIApplicationDelegate接口提供生命周期函數來處理應用程序以及應用程序的系統事件,這些生命周期函數如下表所示:

UIApplicationDelegate Event-Handling Methods

Method Signature

1:application:didChangeStatusBarFrame:

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

2:application:didChangeStatusBarOrientation:

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

3:application:handleOpenURL:

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

4:application:willChangeStatusBarOrientation:duration:

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

(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration

5:application:willChangeStatusBarFrame

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

6:applicationDidBecomeActive:

- (void)applicationDidBecomeActive:(UIApplication*)application

7:applicationDidFinishLaunching:

- (void)applicationDidFinishLaunching:(UIApplication*)application

8:applicationDidReceiveMemoryWarning:

- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application

9:applicationSignificantTimeChange:

- (void)applicationSignificantTimeChange:(UIApplication*)application

10:applicationWillResignActive:

- (void)applicationWillResignActive:(UIApplication*)application

11:applicationWillTerminate:

- (void)applicationWillTerminate:(UIApplication*)application

 

1

  如果利用Xcode的模板創建項目,Xcode會為程序員創建繼承自UIApplicationDelegate的類,但不會自動實現繼承自UIApplicationDelegate的可選的事件處理函數。如果讀者創建一個名為“TestUIApplication”的項目,Xcode會自動創建TestUIApplicationAppDelegate.h和TestUIApplicationAppDelegate.m文件,文件的聲明如下:

  @interface TestUIApplicationAppDelegate : NSObject 《UIApplicationDelegate》

  而應用程序的UIApplication則被定義在MainWindow.xib文件中,并且有一個作為outlet的UIApplicationDelegate引用,如下圖:

  

  圖1

  當應用程序接收到表1中的事件時,UIApplication會調用UIApplicationDelegate中實現的相應的方法。

  從根本上講,委托(delegate)是iPhone中廣泛采用的一種編程方法,這種方法有很多益處:

  它更為簡潔的把程序的邏輯處理從UIApplication中分離了出來。

  它避免了程序員直接從UIApplication派生子類,試想如果通過從UIApplication派生子類的方法來管理應用程序的生命周期和系統事件是多么痛苦的一件事情。

  每個iPhone應用程序都有一個UIApplication,UIApplication是iPhone應用程序的開始并且負責初始化并顯示UIWindow,并負責加載應用程序的第一個UIView到UIWindow窗體中。UIApplication的另一個任務是幫助管理應用程序的生命周期,而UIApplication通過一個名字為UIApplicationDelegate的代理類來履行這個任務。盡管UIApplication會負責接收事件,而UIApplicationDelegate則決定應用程序如何去響應這些事件,UIApplicationDelegate可以處理的事件包括應用程序的生命周期事件(比如程序啟動和關閉)、系統事件(比如來電、記事項警告),本文會介紹如何加載應用程序的UIView到UIWindow以及如何利用UIApplicationDelegate處理系統事件。

  通常對于UIApplication讀者是沒必要修改它的,只需要知道UIApplication接收系統事件即可,而如何編寫代碼來處理這些系統事件則是程序員的工作。處理系統事件需要編寫一個繼承自UIApplicationDelegate接口的類,而UIApplicationDelegate接口提供生命周期函數來處理應用程序以及應用程序的系統事件,這些生命周期函數如下表所示:

  

 

UIApplicationDelegate Event-Handling Methods

Method Signature

1:application:didChangeStatusBarFrame:

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

2:application:didChangeStatusBarOrientation:

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

3:application:handleOpenURL:

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

4:application:willChangeStatusBarOrientation:duration:

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

(UIInterfaceOrientation)newStatusBarOrientation
duration:(NSTimeInterval)duration

5:application:willChangeStatusBarFrame

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

6:applicationDidBecomeActive:

- (void)applicationDidBecomeActive:(UIApplication*)application

7:applicationDidFinishLaunching:

- (void)applicationDidFinishLaunching:(UIApplication*)application

8:applicationDidReceiveMemoryWarning:

- (void)applicationDidReceiveMemoryWarning:(UIApplication*)application

9:applicationSignificantTimeChange:

- (void)applicationSignificantTimeChange:(UIApplication*)application

10:applicationWillResignActive:

- (void)applicationWillResignActive:(UIApplication*)application

11:applicationWillTerminate:

- (void)applicationWillTerminate:(UIApplication*)application

 

1

  如果利用Xcode的模板創建項目,Xcode會為程序員創建繼承自UIApplicationDelegate的類,但不會自動實現繼承自UIApplicationDelegate的可選的事件處理函數。如果讀者創建一個名為“TestUIApplication”的項目,Xcode會自動創建TestUIApplicationAppDelegate.h和TestUIApplicationAppDelegate.m文件,文件的聲明如下:

  @interface TestUIApplicationAppDelegate : NSObject 《UIApplicationDelegate》

  而應用程序的UIApplication則被定義在MainWindow.xib文件中,并且有一個作為outlet的UIApplicationDelegate引用,如下圖:

  

  圖1

  當應用程序接收到表1中的事件時,UIApplication會調用UIApplicationDelegate中實現的相應的方法。

  從根本上講,委托(delegate)是iPhone中廣泛采用的一種編程方法,這種方法有很多益處:

  它更為簡潔的把程序的邏輯處理從UIApplication中分離了出來。

  它避免了程序員直接從UIApplication派生子類,試想如果通過從UIApplication派生子類的方法來管理應用程序的生命周期和系統事件是多么痛苦的一件事情。

  同樣,“委托模式”也是一種常用的面向對象的設計模式,這種設計模式用Java語言可以更好的進行描述。

  “委托模式”中一般有兩個對象參與處理同一個請求,所謂的請求在iPhone中就是應用程序的生命周期和系統事件,接受請求的對象將請求委托給另一個對象來處理,同樣在iPhone中對應的是UIApplication在接收到生命周期和系統事件后委托給UIApplicationDelegate來處理。同樣,委托模式也是很多其它模式的基礎,如狀態模式、策略模式、訪問者模式本質上是在特殊的情況下采用了委托模式。委托模式使得可以用聚合代理繼承,正如iPhone中為了避免直接從UIApplication繼承而采用委托模式一樣。

  如果用Java來模擬iPhone中委托模式的處理過程,UIApplication定義大致如下:

  public class UIApplication {

  public final int UP = 1;

  public final int DOWN = 2;

  public final int DRAG = 3;

  public final int DROP = 4;

  private UIApplicationDelegate Delegate;

  /**

  * @param args

  */

  public UIApplication(UIApplicationDelegate aDelegate)

  {}

  public boolean HandlerSysEvents(int aEventValue)

  {

  switch(aEventValue)

  {

  case UP:

  Delegate.HanlderEvents(aEventValue);

  break;

  case DOWN:

  Delegate.HanlderEvents(aEventValue);

  break;

  case DRAG:

  Delegate.HanlderEvents(aEventValue);

  break;

  case DROP:

  Delegate.HanlderEvents(aEventValue);

  break;

  }

  return false;

  }

  }

  而委托接口UIApplicationDelegate的定義如下:

  public interface UIApplicationDelegate {

  public void applicationDidFinishLaunching(UIApplication application);

  public boolean HanlderEvents(int aEventsValue);

  }

  可見,通過傳遞UIApplicationDelegate到UIApplication中,系統就可以在UIApplication接收到系統事件時調用委托類UIApplicationDelegate中相應的方法來處理系統事件。

  探究iPhone不采用繼承體系而采用委托模式來實現聚合的原因,其更深層次在于iPhone框架的多樣化使得繼承無法保證子類行為的一致性,而委托模式恰恰是為了彌補繼承的這個缺點誕生的。

  打開Other Sources目錄下main.m文件,可以看到如下代碼:

  #import 《UIKit/UIKit.h》

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

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

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

  [pool release];

  return retVal;

  }

  每個項目都會有一個UIApplication對象來處理應用程序的生命周期和系統事件,main()函數通過UIApplicationMain()來初始化應用程序的UIApplication,如果讀者想對應用程序的UIApplication進行操作,就只能通過[UIApplication sharedApplication]來獲取到UIApplication的引用,這個方法會返回一個全局唯一的UIApplication對象給讀者。

  同樣,讀者可以通過如下代碼獲取應用程序的委托對象:

  UIApplicationDelegate* myDelegate = [[UIApplication sharedApplication] delegate];

  在UIApplication接收到系統事件和生命周期事件時,會把相應的事件傳遞給UIApplicationDelegate進行處理,表1所列的生命周期函數大都是可選的,但為了應用程序的健壯性程序員應該實現它們。

  iPhone并不是多任務的操作系統,所以應用程序很容易受到打擾,比如一個來電可能導致應用程序失去焦點,如果這個時候接聽了電話,那么應用程序會自動終止運行。還有很多其它類似的事件會導致iPhone應用程序失去焦點,在應用程序失去焦點前會調用委托類的applicationWillResignActive()方法,而應用程序再次獲取到焦點的時候會調用applicationDidBecomeActive()方法。比如在運行應用程序的時候鎖屏會調用委托類的applicationWillResignActive()方法,而當屏幕被解鎖的時候,又會調用applicationDidBecomeActive()方法。

  另外一個非常重要的方法就是applicationDidReceiveMemoryWarning(),因為iPhone設備只有有限的內存,如果為應用程序分配了太多內存操作系統會終止應用程序的運行,但在終止之前操作系統會通過先調用委托類的applicationDidReceiveMemoryWarning()方法警告應用程序,在UIApplication接收到這個事件后它會傳遞給委托類的applicationDidReceiveMemoryWarning()方法,委托類在這個方法內可以進行釋放內存的操作以防止操作系統強制終止應用程序的運行。

此內容為AET網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          在线观看视频免费一区二区三区| 一本色道久久加勒比88综合| 亚洲综合第一| 欧美本精品男人aⅴ天堂| 国产精品亚洲综合一区在线观看| 亚洲午夜精品视频| 久久久亚洲精品一区二区三区| 国产综合欧美| 久久综合九色综合网站| 日韩系列欧美系列| 欧美日韩国产限制| 精品999在线观看| 久久综合图片| 国产精品日韩欧美一区二区三区| 亚洲综合丁香| 亚洲精品欧美专区| 亚洲综合欧美| 久久国产精品72免费观看| 先锋影音网一区二区| 欧美激情亚洲| 欧美日韩大陆在线| 欧美h视频在线| 亚洲性夜色噜噜噜7777| 牛夜精品久久久久久久99黑人| 激情一区二区| 在线一区二区日韩| 国产精品久久久久9999吃药| 国产亚洲欧美一区二区三区| 国产模特精品视频久久久久| 欧美日韩99| 精久久久久久| 久久久久国产一区二区| 伊人激情综合| 亚洲第一区色| 狠狠88综合久久久久综合网| 国产精品黄色| 黄色成人免费网站| 欧美精品123区| 美女诱惑黄网站一区| 欧美一区激情视频在线观看| 国产精品久久久久aaaa| 国产精品一香蕉国产线看观看| 日韩视频免费大全中文字幕| 激情久久久久久| 亚洲一区二区三区在线观看视频| 国产欧美精品在线观看| 久久婷婷丁香| 国产精品v欧美精品v日本精品动漫| 最新日韩av| 韩国av一区二区三区四区| 欧美一级理论性理论a| 久久亚洲精品一区| 久热国产精品视频| 国产精品第一区| 国产精品黄色在线观看| 久久久精品性| 欧美日韩在线一区二区| 亚洲综合色视频| 亚洲视频在线观看免费| 久久久中精品2020中文| 国产亚洲视频在线| 欧美亚洲日本国产| 怡红院精品视频在线观看极品| 亚洲欧美视频| 欧美三级在线播放| 欧美精品成人91久久久久久久| 久久精品论坛| 欧美日韩国产成人在线观看| 国产精品一区二区三区免费观看| 亚洲综合精品自拍| 欧美日韩视频专区在线播放| 免费亚洲一区| 欧美日韩综合在线| 国产一区二区三区精品欧美日韩一区二区三区| 亚洲精品一二三区| 欧美激情精品久久久久久| 欧美午夜精品久久久久久浪潮| 久久综合狠狠综合久久综青草| 欧美激情五月| 蜜臀va亚洲va欧美va天堂| 国产精品s色| 欧美激情精品久久久久久免费印度| 国产精品福利久久久| 国产乱码精品| 国产精品欧美日韩一区二区| 午夜精品一区二区三区在线播放| 欧美一区二区三区电影在线观看| 国产视频丨精品|在线观看| 国产精品一区久久久| 国产一区二区丝袜高跟鞋图片| 亚洲免费观看在线视频| 狠狠色综合日日| 麻豆精品精品国产自在97香蕉| 久久激情五月激情| 国产精品大片wwwwww| 国产综合网站| 国产精品视频你懂的| 99国产精品99久久久久久粉嫩| 这里是久久伊人| 欧美午夜片在线免费观看| 久久久www成人免费毛片麻豆| 亚洲国产日韩在线一区模特| 午夜精品久久久久久久白皮肤| 欧美日韩国产美女| 亚洲国产欧美一区二区三区同亚洲| 欧美精品一区二区视频| a91a精品视频在线观看| 国产精品高潮呻吟久久av黑人| 亚洲电影免费在线| 亚洲日本无吗高清不卡| 午夜影视日本亚洲欧洲精品| 韩国女主播一区二区三区| 国产精品视频xxx| 久久免费视频在线| 亚洲国产成人久久综合一区| 欧美国产在线电影| 亚洲精品字幕| 性欧美8khd高清极品| 最新亚洲激情| 一本色道88久久加勒比精品| 老司机亚洲精品| 欧美精品1区2区3区| 激情伊人五月天久久综合| 亚洲欧美日韩一区在线观看| 亚洲一区美女视频在线观看免费| 美日韩精品免费观看视频| 国产日韩欧美视频| 欧美日韩在线一区二区三区| 亚洲一区二区三| 欧美在线三区| 久久综合色88| 伊人久久婷婷色综合98网| 久久综合九色九九| 国产精品99久久久久久久久久久久| 老司机一区二区三区| 国产一区二区三区四区在线观看| 亚洲国产成人精品久久久国产成人一区| 欧美精品三区| 久久综合久色欧美综合狠狠| 原创国产精品91| 久久riav二区三区| 国产日韩精品一区二区浪潮av| 亚洲欧美另类久久久精品2019| 欧美日本高清一区| 亚洲男女毛片无遮挡| 亚洲欧美欧美一区二区三区| 亚洲欧美日韩精品久久| 亚洲欧洲一区二区在线播放| 国产小视频国产精品| 久久久噜噜噜久久中文字幕色伊伊| 99精品欧美一区二区三区综合在线| 99国产精品私拍| 一本久道久久综合婷婷鲸鱼| 欧美日韩国产欧美日美国产精品| 国产精品美女www爽爽爽| 欧美日韩在线观看视频| 亚洲永久精品国产| 国内久久视频| 亚洲国产成人久久综合一区| 国产精品久久久久久久久久直播| 一区免费视频| 久久综合久久综合九色| 国产精品三级视频| 久久久久99精品国产片| 国产精品久久久久久久久久妞妞| 亚洲天堂免费在线观看视频| 亚洲电影一级黄| 日韩一级在线| 美日韩丰满少妇在线观看| 国产精品久久久久久久久免费樱桃| 欧美另类女人| 欧美成人三级在线| 国产精品永久入口久久久| 欧美日韩另类一区| 国产精品久久久久毛片大屁完整版| 久久精品在线观看| 亚洲欧美国产精品桃花| 欧美午夜大胆人体| 国产精品超碰97尤物18| 久久人人97超碰精品888| 一区二区三区 在线观看视| 欧美亚韩一区| 欧美大片91| 欧美中文字幕在线播放| 亚洲国产日韩欧美一区二区三区| 久久国产一区二区三区| 欧美综合国产精品久久丁香| 欧美在线欧美在线| 久久久久久999| 亚洲一区自拍| 欧美色图一区二区三区| 韩国女主播一区二区三区| 欧美激情综合五月色丁香小说| 久久免费一区| 欧美精品一区二区蜜臀亚洲| 欧美日韩国产精品自在自线| 亚洲男人的天堂在线aⅴ视频| 国产精品综合不卡av| 国产三级精品在线不卡| 狼狼综合久久久久综合网| 免费在线视频一区| 欧美激情按摩在线| 欧美激情视频在线播放| 欧美夜福利tv在线| 一区精品久久| 欧美日韩亚洲国产精品| 国产精品第一页第二页第三页| 在线成人国产| 久久久7777| 一区二区三区在线观看视频| 亚洲国产欧美精品| 欧美日本亚洲| 欧美性理论片在线观看片免费| 欧美日韩精品一区二区天天拍小说| 国产一区二区精品久久99| 国产精品久久9| 亚洲综合精品自拍| 亚洲激情影院| 国产精品久久久久久久久借妻| 欧美一区二区三区视频在线| 蜜臀久久99精品久久久画质超高清| 影音先锋中文字幕一区二区| 国产欧美一区二区精品性| 欧美国产极速在线| 久久亚洲精品视频| 亚洲精品久久久久久一区二区| 亚洲日本成人女熟在线观看| 国模套图日韩精品一区二区| 一本色道久久综合精品竹菊| 一区二区欧美激情| 国产一区二区精品久久| 久久亚洲视频| 欧美噜噜久久久xxx| 亚洲人成人99网站| 国产精品户外野外| 中文亚洲字幕| 欧美日韩你懂的| 国产农村妇女精品| 免费国产自线拍一欧美视频| 激情国产一区二区| 国产一区二区高清不卡| 雨宫琴音一区二区在线| 国模叶桐国产精品一区| 久久黄色级2电影| 久久精品国产99精品国产亚洲性色| 欧美日韩成人在线| 欧美视频在线播放| 亚洲视频日本| 美玉足脚交一区二区三区图片| 久久久视频精品| 亚洲电影在线| 亚洲乱码精品一二三四区日韩在线| 伊人夜夜躁av伊人久久| 亚洲图中文字幕| 99人久久精品视频最新地址| 亚洲欧美日韩综合一区| 国产精品久久久久久福利一牛影视| 国产一区二区三区丝袜| 99精品久久| 免费在线成人| 久久久蜜桃一区二区人| 国产精品毛片高清在线完整版| 开心色5月久久精品| 亚洲欧洲一区二区天堂久久| 一区二区三区回区在观看免费视频| 欧美在线视频在线播放完整版免费观看| 亚洲精品日产精品乱码不卡| 中日韩美女免费视频网址在线观看| 91久久嫩草影院一区二区| 国产精品综合av一区二区国产馆| 亚洲国产经典视频| 一区二区三区四区在线| 国产欧美精品在线| 狼狼综合久久久久综合网| 国产免费成人在线视频| 欧美日韩免费观看一区=区三区| 国产精品theporn| 1000部精品久久久久久久久| 亚洲高清不卡av| 国自产拍偷拍福利精品免费一| 亚洲国产欧洲综合997久久| 亚洲国产精品欧美一二99| 国产精品久久久久7777婷婷| 欧美亚洲免费电影| 欧美午夜精品理论片a级大开眼界| 欧美福利一区二区三区| 亚洲美女尤物影院| 一区二区三区 在线观看视频| 久久er精品视频| 欧美激情日韩| 狼人社综合社区| 国产精品视频九色porn| 日韩午夜av在线| 欧美精品久久久久久久免费观看| 一区二区毛片| 午夜精品亚洲| 午夜在线视频观看日韩17c| 亚洲国产精品99久久久久久久久| 亚洲精品视频在线| 久久久噜噜噜久久中文字免| 亚洲一级免费视频| 国产午夜精品美女毛片视频| 亚洲国产天堂久久综合| 国产精品国产三级国产a| 午夜精品影院在线观看| 欧美精选一区| 欧美日韩成人综合在线一区二区| 国产亚洲免费的视频看| 亚洲另类一区二区| 精品成人一区二区| 久久综合亚洲社区| 久久综合一区二区| 一区二区三区导航| 久久久精品2019中文字幕神马| 国产精品久久看| 国产一区二区三区在线免费观看| 欧美午夜不卡视频| 免费成人你懂的| 在线精品高清中文字幕| 99国产精品自拍| 国产亚洲一区二区三区在线播放| 欧美另类在线观看| 在线日韩av片| 99国内精品久久久久久久软件| 亚洲一区二区三区免费视频| 欧美成人精品在线观看| 欧美日韩和欧美的一区二区| 欧美伦理影院|