在程序的启动过程中提到如果没有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. kafka如何防止key相同的消息并发消费

    最开始,我认为只用把消费者设置为单线程消费,就可以避免并发问题. 因为同一个key,分区一定相同,那么就只会被同一个消费者消费,消费者又是单线程,这样就避免了并发问题 后面发现,上述的方式没有办法处理 ...

  2. MySQL 数据库的基本使用

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,而MySQL AB 公司被 Oracle 公司收购,故 MySQL 现在属于 Oracle 公司.MySQL 是一种关联数据 ...

  3. 3.7 Go指针

    1. Go指针 每个变量在运行时都拥有一个地址,这个地址代表变量在内存中的位置. Go 语言中使用&作符放在变量前面对变量进行“取地址”操作. 1.指针默认值nil 2.通过&(取地值 ...

  4. Linux系统rabbitmq安装

    rabbitmq消息队列(Message Queue)是一种应用间的通信方式,消息发送后可以立即返回,由消息系统来确保消息的可靠传递.消息发布者只管把消息发布到 MQ 中而不用管谁来取,消息使用者只管 ...

  5. Jenkins-Sonar集成配置及注意点

    首先说说关于Jenkins集成Sonar的相关配置:我jenkins与Sonar不在同一个服务器上! 先现在 SonarQube Scanner 插件. SonarQube Servers:系统配置 ...

  6. PLC可编程控制器的结构和工作原理

    PLC的可编程控制器由的功能结构由cpu中央处理器,存储器和输入输出借口三部分组成 CPU Cpu的功能是完成plc所有的的控制和监视, Cpu中央处理去由控制器,寄存器,运算器.通过数据总线,地址总 ...

  7. CSS3和HTML5头部定位自用

    body{ max-width: 540px; min-width: 320px; margin: 0 auto; font: normal 14px/1.5 tahoma; color: #000; ...

  8. CSS综合案例

    代码示例:新闻页面: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  9. 如何在npm发布轮子

    我们在前端工程开发中通常使用npm这个包管理器来安装各种好用的轮子(当然也有用yarn的),不安分的码工就想,也发布一个试试,哪怕只是一个小时候滚的铁环而不是轮子. 首先,要在 npmjs官网注册自己 ...

  10. eatwhatApp开发实战(九)

    之前我们为app在item项上添加了点击出现修改对话框,对店名进行修改的功能,其中我们会发现我们点击item和点击item上的按钮会有点击冲突.这次我们来修正下这个问题,同时介绍item项的长按点击O ...