標籤:
第一、initWithNibName這個方法是在controller的類在IB中建立,但是通過Xcode執行個體化controller的時候用的.
第二、initWithCoder 是一個類在IB中建立但在xocde中被執行個體化時被調用的.比如,通過IB建立一個controller的nib檔案,然後在xcode中通過 initWithNibName來執行個體化這個controller,那麼這個controller的initWithCoder會被調用.或者是一個view的nib檔案,類似方法建立時調用initWithCoder
第三、awakeFromNib
當.nib檔案被載入的時候,會發送一個awakeFromNib的訊息到.nib檔案中的每個對象,每個對象都可以定義自己的awakeFromNib函數來響應這個訊息,執行一些必要的操作。也就是說通過nib檔案建立view對象時執行awakeFromNib
第四、關於 initWithNibName 和 loadNibNamed 的區別和聯絡 :
關於 initWithNibName 和 loadNibNamed 的區別和聯絡。之所以要把這兩者來一起講,我覺的我也有點困惑,到底用那種?其實真正搞清楚了他們之間的差別,就不會這麼迷惘了。因為這兩個方法,根本就不是一路貨色。
既然,是要說明這2個方法,那就著重將區別吧。
但是第一步,還是要羅嗦一下,他們的聯絡:可以使用此方法載入使用者介面(xib檔案)到我們的代碼中,這樣,可以通過操作這個載入進來的(xib)對象,來操作xib檔案內容。
下面進入主題,談區別:
1. ShowViewController的initWithNibName方法
ShowViewController * showMessage = [[ShowViewController alloc]
initWithNibName:@"ShowViewController" bundle:nil];
self.showViewController = showMessage;
[showMessage release];
2.VideoCellController的loadNibNamed方法
NSArray * nib = [[NSBundle mainBundle] loadNibNamed:@"Save3ViewController"
owner:self options:nil] ;
總結:
只看他們初始化,那可能感覺是一樣的。但是如果,開啟分別看xib的關係的時候,才恍然大悟,原來他們的整合類都不一樣。
1. initWithNibName要載入的xib的類為我們定義的視圖控制器類
2.載入方式不同
initWithNibName方法:是消極式載入,這個View上的控制項是 nil 的,只有到 需要顯示時,才會不是 nil
loadNibNamed方法:即時載入,用該方法載入的xib對象中的各個元素都已經存在。
(認真理解這句幫規:when using loadNibNamed:owner:options:, the File‘s Owner should be NSObject, the main view should be your class type, and all outlets should be hooked up to the view, not the File‘s Owner.)
第五、initWithCoder和initWithFrame的區別
initWithoder 是當從nib檔案中載入對象的時候會調用,比如你的view來自nib那麼就會調用這個view的這個函數。(由架構調用)
initWithFrame (是由使用者調用,來初始化對象的)
The init method that gets used depends on how the view is created. It can be explicitly created using initWithFrame or it can be created by loading a nib. In that case, the initWithCoder method gets called when the view is loaded from the nib. There are other init methods for subclasses (like UITableViewController has initWithStyle), so you have to be sure which one is being called.
self.showViewController = [nib lastObject];
[nib objectAtIndex:0];
摘於:百度與你同在 團隊 百度回答
iOS_init相關資訊