(1)awakeFromNib和initWithCoder:差別
awakeFromNib 從xib或者storyboard加載完畢就會調(diào)用
initWithCoder: 只要對象是從文件解析來的,就會調(diào)用
同時存在會先調(diào)用initWithCoder:
(2)initWithCoder: & initWithFrame:
initWithCoder:使用文件加載的對象調(diào)用(如從xib或stroyboard中創(chuàng)建)
initWithFrame:使用代碼加載的對象調(diào)用(使用純代碼創(chuàng)建)
注意:所以為了同時兼顧從文件和從代碼解析的對象初始化液肌,要同時在initWithCoder: 和 initWithFrame: 中進行初始化
nib 加載結(jié)構(gòu)時 發(fā)送一個awakeFromNib消息告訴每個對象重建一個nib 歸檔,但只有在所有的檔案中的對象已加載和初始化。當(dāng)一個對象接收awakefromnibmessage庄新,這是保證其所有出口和行動連接已經(jīng)建立答捕。
你必須調(diào)用awakefromnib super實施給父類的運行的機會去做額外的初始化工作禀忆。雖然這種方法的默認實現(xiàn)不執(zhí)行任何操作,許多UIKit類提供非空的實現(xiàn)营袜。你可以叫super 實現(xiàn)在任何一點你自己的awakefromnib方法里。
實例化過程中丑罪,存檔中的每個對象未歸檔然后初始化的方法適合于它的類型荚板。符合nscoding協(xié)議對象(包括所有子類和處理)正在用他們的initwithcoder初始化:方法。不符合nscoding協(xié)議所有的對象都是使用init方法初始化吩屹。在所有對象被實例化和初始化啸驯,the nib 加載代碼,將所有這些對象的出口和動作的連接祟峦。然后調(diào)用對象的awakefromnib方法罚斗。更詳細的信息有關(guān)的步驟,然后nib在加載過程中宅楞,看到“NIB文件”在資源規(guī)劃指南针姿。
// 先歸檔方法
-(id)initWithCoder:(NSCoder *)aDecoder
{
self = [super initWithCoder:aDecoder];
if (self) {
}
return self;
}
// 保證出口和行動連接已經(jīng)建立 調(diào)用 awakeFromNib
-(void)awakeFromNib
{
[super awakeFromNib];
}
NIB文件是應(yīng)用程序所有對象的存檔袱吆。當(dāng)程序啟動后,對象從文件中釋放距淫,重新賦予生命绞绒,準備接收用戶觸發(fā)的事件信息。這種機制有些與眾不同:大多數(shù)GUI的設(shè)計都是為界面布局產(chǎn)生源代碼榕暇;相反蓬衡,Interface Builder則允許開發(fā)者編輯好頁面元素的狀態(tài)后,把它們保存在文件里面彤枢。在對象從文件中釋放狰晚、獲得生命,而沒有接收到用戶事件以前缴啡,所有的對象自動發(fā)送awakeFromNib消息壁晒。開發(fā)者可以添加awakeFromNib方法,用來初始化文本框的值业栅。
parm mark 2
-(void)awakeFromNib;從字面上理解秒咐,就是從nib文件中喚醒對象,完成對每一個對象的實例化或與nib文件的關(guān)聯(lián)碘裕。
誰喚醒這個方法携取?
awakeFromNib是由nib loading machinery發(fā)出的。[NSBundle loadNibFile:externalNameTable:withZone:],加載nib文件帮孔,完成初始化設(shè)置和連接歹茶,并且在所有關(guān)聯(lián)的對象上喚醒awakeFromNib方法。
誰響應(yīng)這個方法你弦?
Cunstom Controller 和Cunstom Window都會響應(yīng)awakeFromNib方法惊豺。當(dāng)一個nib文件已經(jīng)完成所有對象的加載之后,會對每一個與nib文件關(guān)聯(lián)的對象loop back禽作。此時尸昧,如果awakeFromNib方法中有需要響應(yīng)的對象,它就會在該對象上喚起awakeFromNib方法旷偿。因此烹俗,我們可以在awakeFromNib方法中操作任何甚至所有的nib中的對象。
需要注意的問題:
當(dāng)使用一個controller控制多個nib文件時萍程,awakeFromNib方法會被多次調(diào)用幢妄。因此,當(dāng)不使用awakeFromNib方法來完成nib對象的初始化時茫负,需要注意此方法的多次調(diào)用對其他nib文件造成的影響蕉鸳。