iOS UIViewController 應用要點

 

iOS UIViewController 應用要點

iOS UIViewController 使用要點

        1. 視圖控制對象有一個類型爲UIView的屬性view。這個視圖一般會有子視圖,例如按鈕和標籤。視圖控制對象一般是UIViewController的子類。擁有一個名爲view的實例變量。 app

        2. 視圖控制對象的做用是充當其視圖的控制器對象。此外,一般還須要一個對像來負責視圖的交換工做。 spa

        3. 有兩種建立視圖的方法,一種是用代碼建立視圖,一種是建立xib文件。如何決定使用那種方法,這裏有一條經驗法則: 對象

           當視圖控制器對象只有一個視圖的時候(沒有子視圖),那麼用代碼來建立單個視圖一般會更容易。若是視圖有子視圖,就經過xib文件建立。 生命週期

        4.  使用視圖控制對象時,不會直接修改視圖層次結構。UIWindow實現了一個名爲setRootViewController:的方法。將UIViewController實例做爲參數傳入該方法,傳入 內存

的視圖控制對象的視圖會自動加入窗口,成爲窗口的子視圖並調整大小和窗口保持一致。窗口對象會保留它的跟視圖對象。 資源

         此處附圖: it

       5. 須要建立視圖時,視圖控制對象會調用loadView方法。建立UIViewController實例後,其下的視圖不會立刻被建立,要等到視圖控制對象的視圖加入視圖層次結構後 效率

       (即視圖第一次出如今屏幕上時)纔會建立。 變量

6.建立 UIViewController子類的實例時,經過指定的初始化方法 initWithNibName:bundle:傳入的XIB文件的文件名。當視圖控制對象須要使用實例變量view的時候,會查看應用程序包內是否存在相應的xib文件(若是傳入的名稱時nil,那麼UIViewController對象會查找和這個UIViewController子類的類名匹配的xib文件)。接着視圖對象會載入找到的xib文件。 程序

        7.loadView方法負責完成上述XIB載入過程。UIViewController的默認loadView方法會查找並載入XIB文件,因此在編寫經過XIB文件載入視圖的UIViewController子類時,不要覆蓋loadView。而在編寫經過代碼建立視圖的UIViewController子類時,就必須覆蓋loadView,避免載入XIB文件。

        8.UIViewController會在特定的時刻調用一下方法。

       * viewWillAppear:當UIViewController對象的視圖即將加入窗口時調用

       *viewDidAppear:當UIViewController對象的視圖已經加入窗口時調用

       *viewWillAppear:當UIViewController對象的視圖即將消失,被覆蓋或是隱藏時調用。

       *viewDidDisappear:當UIViewController對象的視圖已經消失,被覆蓋或是隱藏時調用。

雖然某個UIViewController對象只會建立一次,可是他的視圖一般會顯示(移除或消失)屢次。因此一般須要覆蓋視圖控制對象在這些時刻的默認行爲。

UIViewController中的這些方法不作任何事情,僅供子類覆蓋。

    8.和其它對象同樣,視圖控制對象也是經過alloc和init建立的。可是視圖控制對象不會在建立的那一刻立刻建立相應的視圖,而是要等到真正的須要試圖時,纔會經過調用loadView來建立。這種延遲建立的作法能提升內存的使用效率。例如:若是某個標籤條有不少UIViewController對象,那麼任何一個UIViewController對象的視圖,只會在相應的標籤項被選中時纔會被建立出來。視圖控制對象會在收到view消息的那一刻載入視圖。

- (UIView *)view

{

if( [self isViewLoaded] == NO)

       {

            [self loadView];

            [self viewDidLoad];

       }

      return self;


}

這段代碼的做用,一旦某個視圖控制對象要求獲取視圖試圖控制對象的視圖,而且該視圖還不存在,那麼視圖控制對象就會建立一個視圖。


9.視圖控制對象的視圖能夠有子視圖,其中一些子視圖會做爲插座變量和視圖控制對象關聯。當對象A和插座變量創建關聯後,擁有插座變量的對象B會保留對象A。此外,由於父視圖會保留他的子視圖,因此A的retain計數會是2。

  當發生內存太低警告時,視圖控制對象會釋放它的視圖。釋放視圖時,視圖會向他的子視圖發送release消息。可是視圖控制對象依然保留這一個A的retain計數。

因此,在視圖控制對象卸載他的視圖時,應該向全部的插座變量發送release消息。不然這些變量最終會被新建立的對象替換掉。通常能夠在viewDidUnload中完成這個任務。

   釋放視圖控制對象時,不會調用該對象的viewDidUnLoad方法(可是其視圖仍是會被釋放),因此,是被釋放的視圖控制對象必須在dealloc中釋放全部的插座變量。

10.  牢記:視圖和它的視圖控制對象時兩個分開的對象。在視圖控制對象的生命週期裏,它的視圖能夠建立,在窗口中顯示,從窗口中移除,釋放和再次建立屢次。咱們能夠認爲視圖是一種能夠再生的資源,視圖控制對象經過該資源與用戶溝通。

相關文章
相關標籤/搜索