天天看點

IOS學習筆記1(入門)——UI繼承關系(轉)、App生命周期

(ps:本來打算自己寫一個的,後來無意中發現另一個部落客寫的很不錯,就不算重複叙述了,轉自:http://www.jianshu.com/p/acca62e8daa2)

UI的繼承關系圖:

IOS學習筆記1(入門)——UI繼承關系(轉)、App生命周期

NSObject

NSObject

了解這個圖之前,可以去補充一下 UIKit的知識。

和Mac OS X的應用程式有所不同,iPhone應用通常隻有一個視窗,就是一個UIWindow類的執行個體。應用程式在啟動時建立這個視窗(或者從nib檔案進行裝載),并往視窗中加入一個或多個視圖,然後将它顯示出來。iOS程式啟動完畢後,建立的第一個視圖控件就是UIWindow,接着建立控制器的view,最後将控制器的view添加到UIWindow上,于是控制器的view就顯示在螢幕上了。一個iOS程式之是以能顯示到螢幕上,完全是因為它有UIWindow。也就說,沒有UIWindow,就看不見任何UI界面。

和Mac OS X有點不同,在Mac OS X中,NSWindow的父類是NSResponder;而在iPhone OS中,UIWindow的父類是UIView。

在建立應用程式視窗時,應該将其初始的邊框尺寸設定為整個螢幕的大小。如果視窗是從nib檔案裝載,Interface Builder不允許建立比螢幕尺寸小的視窗;如果視窗是通過程式設計方式建立的,則必須在建立時傳入期望的邊框矩形。除了螢幕矩形之外,沒有理由傳入其它邊框矩形。螢幕矩形可以通過UIScreen對象來取得,具體代碼如下:

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

上面這個視圖層次可以分為如下幾個大類:

容器

容器視圖用于增強其它視圖的功能,或者為視圖内容提供額外的視覺分隔。比如,UIScrollView類可以用于顯示因内容太大而無法顯示在一個螢幕上的視圖。UITableView類是UIScrollView類的子類,用于管理資料清單。表格的行可以支援選擇,是以通常也用于層次資料的導航—比如用于挖掘一組有層次結構的對象。

UIToolbar對象則是一個特殊類型的容器,用于為一或多個類似于按鍵的項提供視覺分組。工具條通常出現在螢幕的底部。Safari、Mail、和Photos程式都使用工具條來顯示一些按鍵,這些按鍵代表經常使用的指令。工具條可以一直顯示,也可以根據應用程式的需要進行顯示。

控件

控件用于建立大多數應用程式的使用者界面。控件是一種特殊類型的視圖,繼承自UIControl超類,通常用于顯示一個具體的值,并處理修改這個值所需要的所有使用者互動。控件通常使用标準的系統範式(比如目标-動作模式和委托模式)來通知應用程式發生了使用者互動。控件包括按鍵、文本框、滑塊、和切換開關。

顯示視圖

控件和很多其它類型的視圖都提供了互動行為,而另外一些視圖則隻是用于簡單地顯示資訊。具有這種行為的UIKit類包括UIImageView、 UILabel、UIProgressView、UIActivityIndicatorView。

文本和web視圖

文本和web視圖為應用程式提供更為進階的顯示多行文本的方法。UITextView類支援在滾動區域内顯示和編輯多行文本;而UIWebView類則提供了顯示HTML内容的方法,通過這個類,您可以将圖形和進階的文本格式選項內建到應用程式中,并以定制的方式對内容進行布局。

警告視圖和動作表單

警告視圖和動作表單用于即刻取得使用者的注意。它們向使用者顯示一條消息,同時還有一或多個可選的按鍵,使用者通過這些按鍵來響應消息。警告視圖和動作表單的功能類似,但是外觀和行為不同。舉例來說,UIAlertView類在螢幕上彈出一個藍色的警告框,而UIActionSheet類則從螢幕的底部滑出動作框。

導航視圖

頁簽條和導覽列和視圖控制器結合使用,為使用者提供從一個螢幕到另一個螢幕的導航工具。在使用時,您通常不必直接建立UITabBar和UINavigationBar的項,而是通過恰當的控制器接口或Interface Builder來對其進行配置。

視窗

視窗提供一個描畫内容的表面,是所有其它視圖的根容器。每個應用程式通常都隻有一個視窗。更多資訊請參見“UIWindow的作用”部分。

除了視圖之外,UIKit還提供了視圖控制器,用于管理這些對象。更多資訊請參見“視圖控制器的作用”部分。

UIWindow的建立過程

建立一個空的項目,就可以看到UIWindow是怎麼出來的了。在程式啟動完畢之後就會調用一次,建立過程如下:

IOS學習筆記1(入門)——UI繼承關系(轉)、App生命周期

UIWindow建立過程

UIWindow建立過程

把 view添加到UIWindow一般有兩種方式:

(1)直接将控制器的view添加到UIWindow中,并不理會它對應的

(2)設定uiwindow的根控制器,自動将rootviewcontroller的view添加到window中,負責管理rootviewcontroller的生命周期

建議使用第二種方法,因為第一種方法會存在很多問題。

APP生命周期:

IOS學習筆記1(入門)——UI繼承關系(轉)、App生命周期

程式運作時狀态的回調:

  • (void)applicationWillResignActive:(UIApplication *)application

    當應用程式将要入非活動狀态執行,在此期間,應用程式不接收消息或事件,比如來電話了

  • (void)applicationDidBecomeActive:(UIApplication *)application
  • (void)applicationDidEnterBackground:(UIApplication *)application

    當程式被推送到背景的時候調用。是以要設定背景繼續運作,則在這個函數裡面設定即可

  • (void)applicationWillEnterForeground:(UIApplication *)application
  • (void)applicationWillTerminate:(UIApplication *)application

    當程式将要退出是被調用,通常是用來儲存資料和一些退出前的清理工作。這個需要要設定UIApplicationExitsOnSuspend的鍵值。

  • (void)applicationDidFinishLaunching:(UIApplication*)application

    當程式載入後執行