storyboard和nib的差别

本文深入解析Storyboard在iOS应用中的作用及实现方式。介绍了Storyboard管理所有视图控制器而非单一控制器的概念,并详细阐述了如何通过UIMainStoryboardFile指定加载的Storyboard文件,以及在AppDelegate中的设置流程。此外还对比了Storyboard与nib文件在应用启动过程中的差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用Storyboard管理的iOS应用中,它的组成部分为AppDelegate和ViewController这两个类以及MainStoryboard.storyboard文件组成。

Storyboard编辑器和Interface Builder很像(我觉得,他们其实就是一样的)。Storyboard管理不是一个视图控制器,而是所有的视图控制器。

建立在storyboard上的应用程序,在它启动时,使用 键UIMainStoryboardFile去指定必须被加载的storyboard的名字。

可以看到该类继承自UIResponder,这是使用storybaord的要求,而以前使用使用nib时,应用委托类是直接继承自NSObject的。
当这个设置提供后,UIApplication将加载MainStoryboard.storyboard文件,同时自动实例化来自storyboard的第一个视图控制器,将该视图控制器的视图们放入一个新的UIWindow对象中。这个过程不需编码。

(注:在nib管理的应用程序中,这个过程是需要编码的,加载视图控制器的所属视图和实例化UIWindow对象。)

iOS应用程序在系统上启动的过程是这样:
第一步,用户tap界面上的应用图标
第二步,应用调用main()函数
第三步,main()函数调用UIApplicationMain()函数。(注:在nib管理的应用程序中,最后一个参数是nil;而在storyboard管理的应用程序中,最后一个参数是AppDelegate的类名称。因为nib文件包含了appDelegate的名称,而storyboard中没有,所以必须在UIApplicationMain()中指定appDelegate的名称。)
main.m文件是应用启动的初始文件。打开main.m文件,如下所示:

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
             return UIApplicationMain(argc, argv, nil,
                      NSStringFromClass([AppDelegate class]));
   }
} 
 

在AppDelegate中,如下所示:

#import <UIKit/UIKit.h>

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property ( strong, nonatomic ) UIWindow * window;
@end
 


 
而且该类只有一个UIWindow的属性,和nib管理的应用程序不同的是,这里没有IBOutlet前缀。这表示这个属性不是一个输出口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值