博主昨天看了些李明杰老师的关于UIWindow以及加载View的视频,觉得有必要一篇技术博客来记录一下,一来是为了给自己学到的东西做一下总结,二来也希望能够对一些对这方面知识不是很熟悉的人,补充一下知识点,废话不多说,进入正题。

一、首先是关于APP在运行后,执行的顺序

 

就是先执行main.m,然后执行AppDelegate,然后再在AppDelegate中初始化视图的容器UIWindow,最后再创建一个控制器的View在UIWindow中显示出来。

 

二、接下来说一下关于UIWindow载入View,首先初始化View有三种方案,包括Xib、storyboard、代码,接下来我讲会从这三个方面来讲述具体实现过程及原理。

一、第一种 关于Storyboard的载入,首先如果工程初始创建的是一个single view  application  在不作任何的处理时,默认加载storyboard。

 

这是因为创建项目的时候,在项目设置当中,勾选了 Main interface 为“Main.storyboard”,系统直接就能够找到载入的Storyboard。

 

这里不得不说一下关于View的载入判定,或者说优先级,如图,显示看看在Appdelegate中是否有loadview方法,如果有则优先级最大,只在loadview中优先初始化视图控件,不理会任何storyboard以及xib。

 

如果没有loadview 则会优先判定是否有Storyboard,而加载storyboard的方法,除了上面交代的默认方法外,还有通过代码实现的方式,具体如下:

在将 Main interface 中清空后,再在appdelegate中输入如下代码: 

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    UIStoryboard * storyboard = [UIStoryboard storyboardWithName:@"Second" bundle:nil];
    UIViewController * vc = [storyboard instantiateInitialViewController];
    self.window.rootViewController = vc;
    [self.window makeKeyAndVisible];

 

如果没有storyboard,则会默认载入Xib,如果关于xib加载,建议创建一个带xib的viewcontroller,这样不会导致一些不必要的麻烦,这里不作赘述,只讲述如何使用:

 

在appdelegate中输入  UIViewController * vc = [UIViewController alloc]initWithNibName:<#(NSString *)#> bundle:<#(NSBundle *)#>

然后输入xib的名字,在NSBundle中输入nil;即可。

 

 

 

当然最后也可以按照代码的方式写一个viewcontroller 然后初始化,加到UIwindow中作为UIWindow中的view。

 

内容主要来自李明杰的iOS视频教学及个人的接受。

 

posted on 2015-08-04 11:05  奋斗的王布斯  阅读(406)  评论(0编辑  收藏  举报