你的位置:首页 > 操作系统

[操作系统]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> 是基于

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

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行代码,轻松任我行。