我不認爲你必須在你的超類上調用awakeFromNib。
檢查this。
編輯
我只是跑了一個快速測試,這裏的結果:
方案1: MainWindow.xib中有一個UIViewController子類TestingAwakeFromNibViewController
,其中有它自己的NIB文件TestingAwakeFromNibViewController.xib
。
TestingAwakeFromNibViewController有一個名爲btn3的UIButton插座。 測試下面的代碼:
- (void)viewDidLoad
{
[super viewDidLoad];
NSLog(@"Btn3 %@",btn3);
NSLog(@"viewDidLoad");
}
-(void) awakeFromNib
{
[super awakeFromNib];
NSLog(@"Btn3 %@",btn3);
NSLog(@"awakeFromNib");
}
將打印:
Btn3 (null)
AwakeFromNib
Btn3 <UIRoundedRectButton: 0x64088e0; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x6408890>>
ViewDidLoad
方案2: 刪除廈門國際銀行文件,添加一個UIView作爲一個兒子裏面的MainWindow.xib的TestingAwakeFromNibViewController,並添加UIButton作爲UIView的子視圖(並將UIbutton插座連接到TestingAwakeFromNibViewController的相應插座)。
現在運行上面的代碼將打印:
Btn3 <UIRoundedRectButton: 0x4e31c30; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e31be0>>
viewDidLoad
Btn3 <UIRoundedRectButton: 0x4e31c30; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e31be0>>
awakeFromNib
含義的viewDidLoad之前AwakeFromNib。
第三種情況: 相同第二,只是不調用[super awakeFromNib];
Btn3 <UIRoundedRectButton: 0x4e0ddf0; frame = (114 211; 72 37); opaque = NO; autoresize = RM+BM; layer = <CALayer: 0x4e0dda0>>
awakeFromNib
現在,viewDidLoad中甚至沒有得到調用。
因此,看起來不同的場景需要採取不同的行動,我們需要根據我們正在採取的行動做好準備。
我不確定你是對的。看看這個:http://stackoverflow.com/questions/377202/which-should-i-use-awakefromnib-or-viewdidload – Idan 2011-06-10 08:21:34
那麼,我在說什麼衝突?事實是,當內存警告發生時,視圖控制器視圖(如果它不可見)被設置爲零並釋放。當它再次變得可見時,視圖控制器從它的xib文件加載其視圖並設置'self.view = viewLoadedFromXib',這樣viewDidLoad再次被調用,而不再次配置自己時不會再次調用awakeFromNib。 – Zapko 2011-06-10 08:38:52
如果你不相信我或我沒有寫清楚,你可以檢查[文檔](http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/BasicViewControllers/BasicViewControllers.html%23// apple_ref/doc/uid/TP40007457-CH101-SW19)。無論如何,它會更有用。 – Zapko 2011-06-10 09:01:23