星空网 > 软件开发 > 操作系统

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 还有三个好汉

iOS之nib、xib及storyboard的区别及storyboard的加载过程images/loading.gif' data-original="http://img1.ph.126.net/SHO6BTcnU5PLf8MWfrmpvQ==/3248221231341263005.jpg" />


当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 的设置。 如下:


iOS之nib、xib及storyboard的区别及storyboard的加载过程



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


 




原标题:iOS之nib、xib及storyboard的区别及storyboard的加载过程

关键词:IOS

IOS
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

数据解析:为什么出口电商卖家要做东南亚市场:https://www.goluckyvip.com/news/3516.html
eBay:关于强化eBay海外仓服务标准的通知:https://www.goluckyvip.com/news/3517.html
Lazada9.9大促怎么预热,蓄水活动装修是重点:https://www.goluckyvip.com/news/3518.html
跨境卖家做Shopee选品要考虑到的基本要素!:https://www.goluckyvip.com/news/3519.html
2018年Wish平台物流的变化_wish物流行业变化趋势:https://www.goluckyvip.com/news/352.html
东南亚年轻妈妈必买, 深扒印尼越南菲律宾飙升关键字:https://www.goluckyvip.com/news/3520.html
从园岭新村到大梅沙海滨总站坐什么车:https://www.vstour.cn/a/363191.html
七月份适合去日本旅游吗 7月份去日本哪里好玩:https://www.vstour.cn/a/363192.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流