awakefromnib何時調用


awakefromnib何時調用

第1、initWithNibName這個方法是在controller的類在IB中建立,可是經過Xcode實例化controller的時候用的. 

第2、initWithCoder 是一個類在IB中建立但在xocde中被實例化時被調用的.好比,經過IB建立一個controller的nib文件,而後在xcode中經過 initWithNibName來實例化這個controller,那麼這個controller的initWithCoder會被調用.或者是一個view的nib文件,相似方法建立時調用initWithCoder 
 
第3、awakeFromNib 
當.nib文件被加載的時候,會發送一個awakeFromNib的消息到.nib文件中的每一個對象,每一個對象均可以定義本身的awakeFromNib函數來響應這個消息,執行一些必要的操做。也就是說經過nib文件建立view對象時執行awakeFromNib
第4、關於 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.)  第5、initWithCoder和initWithFrame的區別  nitWithoder 是當從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];
相關文章
相關標籤/搜索