iOS之nib、xib及storyboard的區別及storyboard的加載過程


先講述下nib, nib是3.0版本以前的產物,在終端下我們可以看到,NIB其實是一個文件夾,里面有可執行的二進制文件;

區分xib和storyboard的區別?

不同點:

1> 無論nib也好,xib也好,最終在執行UIViewController生命周期函數loadView之前,都會轉化成可執行的nib文件。

2> storyboard是多個xib文件集合的描述文件,一個xib文件對應着一個視圖控制器和多個視圖。

  toryboard時,一個工程只需要一個主storyboard文件就可以。

相同點:

1> 是基於xml的描述文件,可以實現可視化編程。

//---------------------------------------------------------------------------------------------------------------------------------------------------------------//

main.storyboard 文件。既然如此,那么storybord又是如何加載的呢?

 

在創建storyboard apps 時,會自動生成幾個默認的文件, AppDelegate.h 便是其中之一。 示意如下:

 

import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

 


@end

 

這些默認生成的文件, 我們要特別關注下, 弄清來龍去脈。 

 

AppDelegate 繼承於 UIResponder,並且擁有一個 UIWindow property。 聲明的方式很簡潔。 

 

再打開默認生成的 AppDelegate.m 文件,你會感到很詫異, AppDelegate.m 所展示的代碼幾乎為空。 所有的method 都是空的。 即使 application:didFinishLaunchingWithOptions: , 僅僅是返回 YES, 也沒有其他代碼可言。 

 

這就是說,不管是 AppDelegate.h 還是AppDelegate.m , 都沒看到什么玄機。 貌似龐然大物的storyboard,究竟是怎么玩的? 

 

常言說的好,一個好漢三個幫。 僅僅查看AppDelegate.h/m ,還是遠遠不夠的,  storybord 還有三個好漢

nib apps VS. storyboard apps - 悠悠電台 - 悠悠電台iOS客戶端:幾千個國內外電台


當storyboard apps 啟動時, 它怎么知道從哪里加載main.storyboard 文件呢?  秘密就在info.plist上。 

你會看到, UIMainStoryboardFile 或 “Main storyboard file base name” 的鍵值設為了 Main。

當app 啟動時,UIApplicaiton 會自動加載main.storyboard 文件。 同時,會自動加載 main.storyboard 上的第一個視圖控制器 (view controller),並且,將該 view controller 所對應的 View 加載到UIWindow 對象中。
也許你已經注意到了, app 啟動時,做了這么的工作,但我們還沒有編寫一行代碼。 storyboard技術的引進,其最大的意義在於, 大大減少與 UI相關的 代碼量。
 
        
 
        
storyboard 幫手:Deployment Info 的設置。  如下:


nib apps VS. storyboard apps - 悠悠電台 - 悠悠電台iOS客戶端:幾千個國內外電台



storyboard 幫手:main.m 文件, 代碼如下:
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

在main.m 中, 雖然語句不多,但這個語句直接決定了app 的生命周期。 這行代碼的作用是,將app delegate class 傳給 UIApplicationMain。

因為整個App 啟動和運行的入口,就在UIApplicationMain中。
以上講述了 sotroyboard 的加載過程。 不管nib 派還是 storyboard 派,其UIMainWindow的加載原理都是一樣的。 

只不過,nib派需要手工編寫更多的代碼。 明白了這些道理, 即使基於 Xcode5創建工程,你也可以置 main.storyboard 於不顧,

盡情地游走於自己創建的nib之間。 正所謂“我的nib,我說了算, 想創建多少nib,就創建多少”。 就是這個 Feel, 倍爽。 一天寫 1000行代碼,輕松任我行。
 
        
 
 
        
 
        


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM