與nib不同的是,xib是乙個xml格式的純文字檔案,而nib是乙個二進位制檔案,xib比nib有個很明顯的好處,就是xib可以很方便地進行diff操作。由於xib是文字檔案,所以在版本控制和管理方面比nib更有優勢。然而,不論在 inte***ce builder中選擇的是nib還是xib格式,xcode編譯後都將得到乙個供程式執行時使用的經過編譯的二進位制nib檔案。現在最新版本的xcode在建立專案時,已經預設使用xib格式的文件了。
實際上,nib的生成過程就是乙個序列化的過程,
nib檔案的生成要經歷兩種序列化。
1. ib所用的文件的序列化,序列化的結果就是這個xml檔案。
它儲存的是所有介面的資源資訊和各個物件之間的關係。
2. 編譯時對這個xml檔案進行的序列化,序列化的結果是二進位制的nib檔案。
寫過ibplugin的人應該知道,所有的控制項必須支援initwithcoder和encodewithcoder的nscoding規範, 這個
就是用來被nskeyedarchiver序列化用的。
編譯時對xml檔案做了如下操作
1. 讀取xml檔案,生成所有介面物件,生成所有object(即自定義的controller類等),設定好各個obejct
之間的聯絡(ibaction,iboutlet)
2. 對這一坨物件進行序列化,即呼叫encodewithcoder方法來序列化,生成二進位制nib檔案
為什麼要生成二進位制檔案,因為從二進位制檔案生成類例項更快一些。
而在程式執行時,對nib檔案進行反序列化的過程
執行時對nib的操作
1. 反序列化,呼叫所有物件的initwithcoder方法
2. 某些類的initwithframe,init之類的方法被呼叫,生成所有類例項
3. 傳送awakefromnib訊息,每個類例項的awakefromnib被呼叫
引用《cocoa programming for mac osx》一書的說法,inte***ce builder 把視窗、選單欄以及視窗上的各種控制項的物件都「凍結」在了乙個 nib文件裡面了;程式執行時,這些物件將會「甦醒」。
猜測nib2.0/3.0時代的多出來的二進位制檔案應該就是被編譯序列化之後的檔案,即nib2.0/3.0的nib檔案由介面資訊檔案和執行時二進位制檔案組成。
由以上的可以看出,凡是被拖到nib裡面的物件都會被自動建立例項,無需你**手動建立(掃盲了。。。),需要用到的話,新增乙個iboutlet即可。
關於nib載入過程,有篇文章已經寫的非常好了,直接引用過來
1、將nib檔案內容與相關資源載入到記憶體
2、反序列化nib物件圖資料,初始化物件。每個新物件如何初始化取決於物件型別以及序列化的方式。
3、重建nib中物件的所有的聯絡(action、outlet),包括與file』s owner與其他佔位物件的聯絡
4、向nib中相應的物件傳送awakefromnib訊息。在ios中,此訊息僅傳送給由nib載入**初始化的物件,file』s owner、
first responser、任一佔位物件都接收不到awakefromnib訊息。
5、顯示那些可見屬性為yes的物件。
總結:a. 載入nib檔案->建立物件alloc->初始化init->建立物件間的連線->向建立的物件傳送awakefromnib訊息。
b. 在執行初始化init方法期間,所有的iboutlet例項變數都為nil,只有建立了nib檔案中的所有物件(包括視窗、文字編輯框、
按鈕…),所有連線才算完成。
c. 一旦建立了所有的連線(即物件位址連線到例項變數),會向所有的物件傳送訊息awakefromnib。在awakefromnib方法中,例項
變數已連線,例項變數有效。
參考:
xib與storyboard的區別
我們經常可以聽到nib開發或xib開發之類的術語,但兩者有什麼區別呢?其實兩者說的意思差不多。nib是3.0版本以前的產物,在終端下我們可以看到,nib其實是乙個資料夾,裡面有可執行的二進位制檔案 xib是乙個基於xml的描述檔案,可以實現視覺化程式設計。無論nib也好,xib也好,最終在執行uiv...
Xib檔案的建立與顯示
1.xib檔案的檢視建立 a 載入xib的檔案 三步走 說明 第一步載入資源檔案 nsbundle是應用程式的資源包 nsbundle mainbundel nsbundle mainbundle b 從xib檔案中讀取檢視 view 儲存方式是陣列的方式 說明 1 載入的時候只載入檔名,不要帶字尾...
MVC架構模式與xib
mvc架構模式 m model,模型,儲存資料 v view,檢視,顯示控制項及資料 c controller,控制器,傳遞資料,管理檢視 xib1 xib檔案是一種自定義檢視。2 建立方法 file new file,選擇ios user inte ce view empty。3 好處 可以先設計...