在程序的启动过程中提到如果没有storyboard时:
     * 程序启动时候, 就会调用代理的application:  didFinishLaunchingWithOptions:方法
     * 在application: didFinishLaunchingWithOptions:中创建UIWindow
     * 创建和设置UIWindow的rootViewController
     * 显示窗口
也就是说:程序启动,先加载UIWindow,UIWindow将作为容器去接收的控件;
那么UIWindow是什么?
     UIwindow是一个特殊的UIView,在一个app只能有一个UIWindow是keyWindow;
     iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建UIViewController的view,最后将UIViewController的view添加到UIWindow上,于是UIViewController的view就显示在屏幕上了;
     一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow。
          ps:UIViewController的属性
        @property(null_resettable,nonatomic,strong)UIView*view;
看一张图片:
 UIwindow的常见方法:
     - (void)makeKeyWindow;
          让当前UIWindow变成keyWindow(主窗口)
     - (void)makeKeyAndVisible;
          让当前UIWindow变成keyWindow,并显示出来
          添加UIView到UIWindow中
     - (void)addSubview:(UIView*)view;
          直接将view添加到UIWindow中,但并不会理会view对应的UIViewController
     @property(nonatomic,retain)UIViewController*rootViewController;
          自动将rootViewController的view添加到UIWindow中,负责管理rootViewController的生命周期
 
    总结:在没有storyboard时,首先需要创建UIWindow,再创建UIViewController;
UIViewController的创建方式一:代码创建
创建一个类YSCViewController继承自ViewController,将头文件(#import“YSCViewController.h”)导入
AppDelegate.m

代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//实例化window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //创建控制器并使之成为root控制器
YSCViewController *vc = [[YSCViewController alloc] init];
self.window.rootViewController = vc; //设置window为主window和可见
[self.window makeKeyAndVisible];
return YES;
}

UIViewController的创建方式二:Xib方式

1.指定xib的名称:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//实例化window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //创建控制器并使之成为root控制器
YSCViewController *vc = [[YSCViewController alloc] initWithNibName:@"YSCViewController" bundle:nil];
self.window.rootViewController = vc; //设置window为主window和可见
[self.window makeKeyAndVisible];
return YES;
}

2.不指定xib的名称时:在Xcode7.1中,默认优先与UIViewController类同名的Xib(即YSCViewController),如果同名的不存在,再去调用去掉Controller的Xib(即YSCView);

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//实例化window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //创建控制器并使之成为root控制器
YSCViewController *vc = [[YSCViewController alloc] init];
self.window.rootViewController = vc; //设置window为主window和可见
[self.window makeKeyAndVisible];
return YES;
}

用xib创建时的注意点:(如果创建类时,同时创建Xib则无需关注)

 把该view连线设为主文件
UIViewController的创建方式三:storyboard方式
创建YSCStoryboard.storyboard,并创建两个UIViewController,并将在storyboard
里面Class 要指向要对应的
UIViewController,我使用工程中已经存在的类默认的ViewController
1.通过初始化“初始控制器”(storyboard中箭头所指的控制器)来导入
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
//实例化window
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; //导入加载storyboard并使之成为root控制器
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YSCStoryboard" bundle:nil];
ViewController *vc = sb.instantiateInitialViewController;
self.window.rootViewController = vc; //设置window为主window和可见
[self.window makeKeyAndVisible];
return YES;
}

2.通过一个标识初始化对应的控制器来导入

    //导入加载storyboard并使之成为root控制器
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"YSCStoryboard" bundle:nil];
ViewController *vc = [sb instantiateViewControllerWithIdentifier:@"edit"];
self.window.rootViewController = vc;

iOS-UIViewController创建的几种方法和UIWindow的介绍的更多相关文章

  1. python中统计计数的几种方法和Counter的介绍

    使用字典dict()alist=['a','b','a','c','b','b',1,3]count_dict = dict()for i in alist:count_dict[i]=count_d ...

  2. 杨柳絮-Info:对抗杨柳絮的7种方法和2种防治手段

    ylbtech-杨柳絮-Info:对抗杨柳絮的7种方法和2种防治手段 园林养护人员在对抗杨柳絮上 主要有以下两种方法↓↓ 1.化学方法 化学方法是通过激素等调节剂来抑制植物发芽分化,达到减少杨柳开花的 ...

  3. 李洪强iOS开发之OC语言description方法和sel

    OC语言description方法和sel 一.description方法 Description方法包括类方法和对象方法.(NSObject类所包含) (一)基本知识 -description(对象 ...

  4. File类创建删除功能的方法和File类遍历(文件夹)目录功能

    File类创建删除功能的方法 -public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件 -public boolean delete(): ...

  5. ps怎么撤销的三种方法和ps撤销快捷键以及连续撤销多步快捷键

    内容提要:文章综合介绍ps撤销快捷键相关的一些操作,包括PS怎么撤销.PS撤销多步.ps连续撤销快捷键.历史记录面板操作等等. 关于ps怎么撤销操作,有多种方法:使用PS撤销快捷键.编辑菜单.文件菜单 ...

  6. js继承的几种方法和es6继承方法

        一.原型链继     1.基本思想     利用原型链来实现继承,超类的一个实例作为子类的原型     2.具体实现     function F() {}     //原型属性,原型方法: ...

  7. (转)AIX修改系统时区的3种方法和AIX 时间问题(夏令时)

    原文:http://blog.csdn.net/fuwencaho/article/details/28267283 http://www.wo81.com/tec/os/aix/2014-04-30 ...

  8. File类创建删除功能的方法和File类遍历目录功能

    File类创建删除功能的方法 public boolean createNewFile();当且仅当具有该名称的文件尚不存在的时候,创建一个新的空文件 public boolean delete(); ...

  9. JavaScript -- Array中的push()方法和concat()方法介绍

    Array => push()方法向数组的末尾添加一个或者多个元素,也就是说它会改变数组本身 concat() => concat()方法用于连接2个或者多个数组,但它的特殊之处在于,它会 ...

随机推荐

  1. 用matplotlib和pandas绘制股票MACD指标图,并验证化交易策略

    我的新书<基于股票大数据分析的Python入门实战>于近日上架,在这篇博文向大家介绍我的新书:<基于股票大数据分析的Python入门实战>里,介绍了这本书的内容.这里将摘录出部 ...

  2. myeclipse快捷键代码

    复制来源百度文库http://wenku.baidu.com/link?url=2DLLTMdq4q_ZrK1Zqg34ElzDePSLC3qfKxi7P2et7NO-g7JErrYS4Dl8dbtR ...

  3. Hyperledger Fabric——balance transfer(三)创建和加入Channel

    详细解析blance transfer示例的创建通道(Channel)和加入节点到通道的过程. 创建Channel 1.首先看app.js的路由函数 var createChannel = requi ...

  4. zoj3997网络流+数学

    题目大意就是每个人都有自己喜欢的座位编号,喜欢的编号是要x的倍数就好,(1<=x<=10)一共10种情况,每种情况的人的数目不一样. 给你一个n,代表有编号1-n这n个座位,问最多能满足多 ...

  5. 树形DP 2415HDU

    Bribing FIPA Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  6. 前端知识点也可以当做面试题含vue

    一.webpack3.x打包工具 三大组成结构.package.json.webpack.config.js.serve.js 1.Package.json:下载目录需要的依赖包 2.Webpack. ...

  7. 进程间的通信——pipe通信

    当进程创建管道文件后,其建立的子进程自动继承该文件. 管道通信分为命名管道和未命名管道,他们的区别是命名管道在当创建他的进程结束后,系统仍存有该文件 管道的命令格式为 pipe(fds) 其中 fds ...

  8. 利用pandas进行数据子集的获取

  9. Blazor WebAssembly 候选版迁移手记

    前言 之前我写过一篇关于 Blazor WebAssembly 的文章浏览器中的 .Net Core —— Blazor WebAssembly 初体验,如今已经更新到 RC-1,与预览版有着较大的差 ...

  10. [PHP自动化-进阶]005.Snoopy采集框架介绍

    引言:Snoopy是一个php类,用来模仿web浏览器的功能,它能完成获取网页内容和发送表单的任务. **官方网址:http://snoopy.sourceforge.net/** 简单一句话表达:& ...