awakeFromNib


(1)awakeFromNib和initWithCoder:差別
awakeFromNib 從xib或者storyboard加載完畢就會調用
initWithCoder: 只要對象是從文件解析來的,就會調用
同時存在會先調用initWithCoder:

(2)initWithCoder: & initWithFrame:
initWithCoder:使用文件加載的對象調用(如從xib或stroyboard中創建)
initWithFrame:使用代碼加載的對象調用(使用純代碼創建)
注意:所以為了同時兼顧從文件和從代碼解析的對象初始化,要同時在initWithCoder: 和 initWithFrame: 中進行初始化

nib 加載結構時 發送一個awakeFromNib消息告訴每個對象重建一個nib 歸檔,但只有在所有的檔案中的對象已加載和初始化。當一個對象接收awakefromnibmessage,這是保證其所有出口和行動連接已經建立。

你必須調用awakefromnib super實施給父類的運行的機會去做額外的初始化工作。雖然這種方法的默認實現不執行任何操作,許多UIKit類提供非空的實現。你可以叫super 實現在任何一點你自己的awakefromnib方法里。

實例化過程中,存檔中的每個對象未歸檔然后初始化的方法適合於它的類型。符合nscoding協議對象(包括所有子類和處理)正在用他們的 initwithcoder初始化:方法。不符合nscoding協議所有的對象都是使用init方法初始化。在所有對象被實例化和初始化,the nib 加載代碼,將所有這些對象的出口和動作的連接。然后調用對象的awakefromnib方法。更詳細的信息有關的步驟,然后nib在加載過程中,看到 “NIB文件”在資源規划指南。

// 先歸檔方法
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
// 保證出口和行動連接已經建立 調用 awakeFromNib
-(void)awakeFromNib
{
[super awakeFromNib];
}

NIB文件是應用程序所有對象的存檔。當程序啟動后,對象從文件中釋放,重新賦予生命,准備接收用戶觸發的事件信息。這種機制有些與眾不同:大多數 GUI的設計都是為界面布局產生源代碼;相反,Interface Builder則允許開發者編輯好頁面元素的狀態后,把它們保存在文件里面。在對象從文件中釋放、獲得生命,而沒有接收到用戶事件以前,所有的對象自動發 送awakeFromNib消息。開發者可以添加awakeFromNib方法,用來初始化文本框的值。

 

-(void)awakeFromNib;從字面上理解,就是從nib文件中喚醒對象,完成對每一個對象的實例化或與nib文件的關聯。
誰喚醒這個方法?

awakeFromNib是由nib loading machinery發出的。[NSBundle loadNibFile:externalNameTable:withZone:],加載nib文件,完成初始化設置和連接,並且在所有關聯的對象上喚 醒awakeFromNib方法。

誰響應這個方法?

Cunstom Controller 和Cunstom Window都會響應awakeFromNib方法。當一個nib文件已經完成所有對象的加載之后,會對每一個與nib文件關聯的對象loop back。此時,如果awakeFromNib方法中有需要響應的對象,它就會在該對象上喚起awakeFromNib方法。因此,我們可以在 awakeFromNib方法中操作任何甚至所有的nib中的對象。

需要注意的問題:
當使用一個controller控制多個nib文件時,awakeFromNib方法會被多次調用。因此,當不使用awakeFromNib方法來完成nib對象的初始化時,需要注意此方法的多次調用對其他nib文件造成的影響。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM