ViewController的生命週期

2021-10-09 21:13:03 字數 2391 閱讀 4776

當乙個檢視控制器被建立,並在螢幕上顯示的時候。 **的執行順序

alloc 建立物件,分配空間

init (initwithnibname) 初始化物件,初始化資料

loadview 從nib載入檢視 ,通常這一步不需要去干涉。除非你沒有使用xib檔案建立檢視

viewdidload 載入完成,可以進行自定義資料以及動態建立其他控制項

當乙個檢視被移除螢幕並且銷毀的時候的執行順序,這個順序差不多和上面的相反

dealloc 檢視被銷毀,此處需要對你在init和viewdidload中建立的物件進行釋放

關於viewdidunload :在發生記憶體警告的時候如果本檢視不是當前螢幕上正在顯示的檢視的話, viewdidunload將會被執行,本檢視的所有子檢視將被銷毀,以釋放記憶體,此時開發者需要手動對viewload、viewdidload中建立的物件釋放記憶體。 因為當這個檢視再次顯示在螢幕上的時候,viewload、viewdidload 再次被呼叫,以便再次構造檢視。

當我們建立乙個uiviewcontroller類的物件時,通常系統會生成幾個預設的方法,這些方法大多與檢視的呼叫有關,但是在檢視呼叫時,這些方法的呼叫順序如何,需要整理下。

通常上述方法包括如下幾種,這些方法都是uiviewcontroller類的方法:

-

(void

)viewdidload; -(

void

)viewdidunload; -(

void

(bool)animated; -(

void

(bool)animated; -(

void

(bool)animated; -(

void

(bool)animated;

1)- (void)viewdidload;2) - (void)viewdidunload;

在記憶體足夠的情況下,軟體的檢視通常會一直儲存在記憶體中,但是如果記憶體不夠,一些沒有正在顯示的viewcontroller就會收到記憶體不夠的警告,然後就會釋放自己擁有的檢視,以達到釋放記憶體的目的。但是系統只會釋放記憶體,並不會釋放物件的所有權,所以通常我們需要在這裡將不需要在記憶體中保留的物件釋放所有權,也就是將其指標置為nil。

這個方法通常並不會在檢視變換的時候被呼叫,而只會在系統退出或者收到記憶體警告的時候才會被呼叫。但是由於我們需要保證在收到記憶體警告的時候能夠對其作出反應,所以這個方法通常我們都需要去實現。

系統在載入所有資料後,將會在螢幕上顯示檢視,這時會先呼叫這個方法。通常我們會利用這個方法,對即將顯示的檢視做進一步的設定。例如,我們可以利用這個方法來設定裝置不同方向時該如何顯示。

在檢視變換時,當前檢視在即將被移除、或者被覆蓋時,會呼叫這個方法進行一些善後的處理和設定。

我們可以重寫這個方法,對已經消失,或者被覆蓋,或者已經隱藏了的檢視做一些其他操作。
流程圖

// push 乙個新的檢視控制器時

// 以上三個方法會插在第二個檢視控制器的viewwilldisapear 和 viewdiddisapear方法中間:

兩個頁面都有如下程式:

-

(void

)loadview -(

void

)viewdidload

// 檢視將要出現時, 就會呼叫-(

void

(bool)animated

// 檢視已經出現時, 就會呼叫-(

void

(bool)animated

// 檢視將要消失, 只要有一點消失, 就會呼叫-(

void

(bool)animated

// 檢視已經完全消失, 就會呼叫-(

上面的6個方法中, 第乙個和第二個方法同時進行, 第三個方法和第四個方法同時進行, 第五個和第六個方法同時進行.

iOS 載入Viewcontroller的幾種方法

一 根據storyboardid 需要在storyboard設定 通過viewcontroller所在的storyboard來載入 uistoryboard storyboard uistoryboard storyboardwithname main bundle nil uiviewcontro...

ViewController的生命週期

這個宇宙中,我們認知當中所有事物都是有乙個起點然後到達乙個終點。在四維的世界裡面,衡量的介質就是時間。所以我們寫的程式也是一樣的,不管是c還是ios程式裡面,每乙個東西在時間流逝中它都有自己的乙個起點,終點。了解程式裡面大部分東西的起點和終點的意義是,我們想在這個東西誕生時候和結束的時候做一些事情,...

ViewController的生命週期

關於viewdidunload 在發生記憶體警告的時候如果本檢視不是當前螢幕上正在顯示的檢視的話,viewdidunload將會被執行,本檢視的所有子檢視將被銷毀,以釋放記憶體,此時開發者需要手動對viewload viewdidload中建立的物件釋放記憶體。因為當這個檢視再次顯示在螢幕上的時候,...