【开发技术】storyboard和nib的差别

在使用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文件,如下所示:

C代码 
  1. #import <UIKit/UIKit.h> 
  2. #import "AppDelegate.h" 
  3.  
  4. int main(int argc, char *argv[]) 
  5.     @autoreleasepool { 
  6.              return UIApplicationMain(argc, argv, nil, 
  7.                       NSStringFromClass([AppDelegate class])); 
  8.    } 
  9. }  
#import <UIKit/UIKit.h>
#import "AppDelegate.h"

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

在AppDelegate中,如下所示:

C代码 
  1. #import <UIKit/UIKit.h> 
  2.  
  3. @interface AppDelegate : UIResponder <UIApplicationDelegate> 
  4. @property ( strong, nonatomic ) UIWindow * window; 
  5. @end 
#import <UIKit/UIKit.h>

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

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

posted @ 2013-08-02 11:53  ejllen  阅读(241)  评论(0编辑  收藏  举报