View的生命周期
Paste_Image.png
main函数 程序的入口main函数
Paste_Image.png
/* UIApplicationMain底层实现
1.根据principalClassName提供类名创建UIApplication对象
2.创建UIApplicationDelegate对象,并且成为UIApplication对象代理,app.delete = delegate
3.开启一个主运行循环,处理事件,可以保持程序一直运行。
4.加载info.plist,并且判断有木有指定main.storyboard,如果指定,就会去加载
*/
Paste_Image.png
UIWindow是一种特殊的View 1.iOS启动完毕后,创建的第一个视图控件就是UIWindow。 2.接着创建控制器的View, 3.然后将控制器的view添加到UIWindow上 4.于是控制器的View就显示在屏幕上了。 5.也就是说没有UIWindow,就没有UI界面
执行main 执行UIAPPLICATIONMain 1.创建UIApplication 2.创建UIApplicationDelegate,并且成为UIApplication的代理 3.开启一个主运行循环 4.加载info.plist,判断有没有指定main.storyboard,指定了就加载
1.创建窗口 2.加载main.storyboard,并且加载main.storyboard指定的控制器 3.把新创建的控制器,作为窗口的根控制器,让窗口显示出来
Paste_Image.png
Paste_Image.png
// 窗口是有层级关系
// UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
Paste_Image.png
1.不通过系统创建:
Paste_Image.png
Paste_Image.png
3.根据标识来加载:
Paste_Image.png
Paste_Image.png
/* 通过xib创建控制器的view
1.一定要描述xib的文件拥有者是控制器,也就是说这个xib是用来描述控制器
*/
1.通过File`s Owner 更改它的描述类型是控制器
Paste_Image.png
2.修改Xib描述为控制器的类型后,就可以连线了。
Paste_Image.png
3.通过Xib 要是用控制器alloc】 initWithNibName:bundle:】 bundle传nil默认就是从[NSBundle mainBundle]
Paste_Image.png
首先自己去创建跟控制器
Paste_Image.png
在AppDelegate中加载:
Paste_Image.png
这里创建出来是箭头指向的控制器的View
Paste_Image.png
但是:通过 loadView方法后 系统就不会去加载storyboard描述的控制器的View
Paste_Image.png
loadView作用:自定义控制器的view loadView什么时候调用:第一次使用控制器的view的时候调用 注意:在这个方法中如果没有自定义view,就不能获取控制器的view // 一旦重写了这个方法,就不要调用[super loadView]
// 如果重写了这个方法,就不会去加载storyboard描述的控制器的View // LoadView 默认就可以加载storyboard和Xib描述的控制器的View
Paste_Image.png
Paste_Image.png
如果在控制器中实现这个方法:
Paste_Image.png
// 加载跟类名相同的xib // 如果描述控制器View的xib跟控制器的类名相同,就会去加载
Paste_Image.png
// 只有控制器的init方法底层会调用initWithNibName:bundle:
Paste_Image.png
// 只要通过initWithNibName:bundle:初始化控制器,并且nibName为nil,就会执行以下几步。 // 1.寻找有没有跟控制器类名同名但是不带Controller的xib,如果有就会去加载(View.xib) // 2.寻找有没有跟控制器类名同名的xib,如果有就会去加载(ViewController.xib) // 3.如果都没有找到,创建空的view,
Paste_Image.png
Paste_Image.png
设置控制器的View = vc.view.alpha = 0; 那么在Windows上添加的按钮可以点击, 如果设置控制器的View的颜色为透明色,但是系统认为只是几乎透明,不可以点击button
控制器的View创建默认就是透明的,看不到也穿不透 我们创建控制器的时候,控制器的View并没有创建
Paste_Image.png
因为你要使用它,所以这一行就会加载
Paste_Image.png
虽然下面设置了控制器的颜色,但是上面的设置颜色阶段就已经显示了控制器
Paste_Image.png
相当于:我已经加载过ViewDidLoad后,才能设置颜色,所以上面的View的蓝色并不会显示
Paste_Image.png
即便加载loadView,也不会改变它的颜色,因为最终要调用ViewDidLoad,颜色还是最开始的红色
Paste_Image.png
也就是self.window.rootViewController = ViewController,就不必设置尺寸