标签:
博主昨天看了些李明杰老师的关于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视频教学及个人的接受。
标签:
原文地址:http://www.cnblogs.com/YaoWang/p/4701423.html