各方法介紹
1.initWithNibName
這個方法是在controller的類在IB中創(chuàng)建,通過Xcode實例化controller的時候用的。
2.loadNibNamed
與initWithNibName類似,也是在NSOjbect類在 IB 中創(chuàng)建,通過Xcode實例化controller和 View 的時候用的利虫。
3.initWithCoder
一個類在IB中創(chuàng)建但在xocde中被實例化時被調(diào)用的.比如,通過IB創(chuàng)建一個controller的nib文件,然后在xcode中通過 initWithNibName來實例化這個controller,那么這個controller的initWithCoder會被調(diào)用.或者是一個view的nib文件洒疚,類似方法創(chuàng)建時調(diào)用initWithCoder。
4.awakeFromNib
當(dāng)nib文件被加載的時候,會發(fā)送一個awakeFromNib的消息到.nib文件中的每個對象,每個對象都可以定義自己的awakeFromNib函數(shù)來響應(yīng)這個消息,執(zhí)行一些必要的操作红选。也就是說通過nib文件創(chuàng)建view對象時執(zhí)行awakeFromNib。
關(guān)于 initWithNibName 和 loadNibNamed 的區(qū)別和聯(lián)系
關(guān)于 initWithNibName 和 loadNibNamed 的區(qū)別和聯(lián)系姆另。之所以要把這兩者來一起講喇肋,我覺的我也有點困惑,到底用那種迹辐?其實真正搞清楚了他們之間的差別蝶防,就不會這么迷惘了。因為這兩個方法明吩,根本就不是一路貨色间学。
既然,是要說明這2個方法,那就著重將區(qū)別吧低葫。
但是第一步详羡,還是要羅嗦一下,他們的聯(lián)系:可以使用此方法加載用戶界面(xib文件)到我們的代碼中嘿悬,這樣实柠,可以通過操作這個加載進(jìn)來的(xib)對象,來操作xib文件內(nèi)容善涨。
下面進(jìn)入主題窒盐,談區(qū)別:
- 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] ;
self.showViewController = [nib lastObject];
[nib objectAtIndex:0];
3.loadNibNamed方法在更多時候用來加載 View
cell = [[[NSBundle mainBundle]loadNibNamed:@"DCFoodCell" owner:nil options:nil] firstObject];
3.總結(jié):
(1) 只看他們初始化,那可能感覺是一樣的钢拧。但是如果蟹漓,打開分別看xib的關(guān)系的時候,才恍然大悟,原來它們繼承的類不同源内。
initWithNibName要加載的xib的類為我們定義的視圖控制器類, loadNibNamed要加載的xib的類為NSOjbect牧牢。
(2) 加載方式不同
initWithNibName方法:是延遲加載,這個View上的控件是 nil 的姿锭,只有到 需要顯示時,才會不是 nil,
loadNibNamed方法:即時加載伯铣,用該方法加載的xib對象中的各個元素都已經(jīng)存在呻此。
(認(rèn)真理解這句幫規(guī):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的區(qū)別
initWithoder 是當(dāng)從nib文件中加載對象的時候會調(diào)用,比如你的view來自nib那么就會調(diào)用這個view的這個函數(shù)腔寡。(由框架調(diào)用) initWithFrame (是由用戶調(diào)用焚鲜,來初始化對象的) ,具體如下:
當(dāng)我們所寫的程序里沒用用Nib文件(XIB)時,用代碼控制視圖內(nèi)容,需要調(diào)用initWithFrame去初始化
- (id)initWithFrame:(CGRect)frame
{
if (self =[superinitWithFrame:frame]) {
// 初始化代碼
}
return self;
}
用于視圖加載nib文件放前,從nib中加載對象實例時忿磅,使用 initWithCoder初始化這些實例對象
- (id)initWithCoder:(NSCoder*)coder
{
if (self =[superinitWithcoder:coder]) {
// 初始化代碼
}
return self;
}