美文网首页ios开发资源收集iOS高阶UI相关UIWindow
iOS开发--UIWindow与程序启动原理与两种创建控制器的方

iOS开发--UIWindow与程序启动原理与两种创建控制器的方

作者: 元宇宙协会 | 来源:发表于2016-01-05 16:43 被阅读1275次

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

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,指定了就加载

加载main.storyboard

1.创建窗口
2.加载main.storyboard,并且加载main.storyboard指定的控制器
3.把新创建的控制器,作为窗口的根控制器,让窗口显示出来

1、手动创建窗口步骤

1.自己加载程序启动-删掉main
Paste_Image.png
2. 在 AppDelegate
Paste_Image.png

举例:如果需要看到键盘,必须把键盘添加到一个View上面去

首先了解什么是窗口:键盘、状态栏是窗口
窗口层级关系:
// 窗口是有层级关系
// UIWindowLevelNormal < UIWindowLevelStatusBar < UIWindowLevelAlert
Paste_Image.png

2、控制器的创建(storyboard)

1.不通过系统创建:

Paste_Image.png
  1. // instantiateInitialViewController:加载箭头指向的控制器
Paste_Image.png

3.根据标识来加载:

Paste_Image.png Paste_Image.png

3、控制器的创建(Xid)

/* 通过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

LoadView

首先自己去创建跟控制器

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

控制器View的创建(XIB)-寻找控制器的XIb

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,

通过XIB创建控制器View的一览表:

Paste_Image.png

控制器View的颜色

Paste_Image.png

设置控制器的View = vc.view.alpha = 0;
那么在Windows上添加的按钮可以点击,
如果设置控制器的View的颜色为透明色,但是系统认为只是几乎透明,不可以点击button

控制器View的懒加载 -(void)ViewDidLoad

控制器的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,就不必设置尺寸

开发注意:不要再ViewDidLoad中打印尺寸,在ViewDidAppear中打印尺寸

相关文章

  • iOS开发--UIWindow与程序启动原理与两种创建控制器的方

    View的生命周期 main函数程序的入口main函数 UIWindow UIWindow是一种特殊的View1....

  • iOS - UIWindow和view控制器的创建

    iOS程序启动完毕后,创建的第一个试图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添...

  • 03-UI进阶(2)

    0610-控制器创建导航控制器 1. 一个IOS程序启动步骤(04-uiwindow) 第一步加载main.m文件...

  • 初识UIWindow

    1.每个App中有一个UIWindow,程序启动后创建的第一个视图控件就是UIWindow,接着创建控制器的vie...

  • UIWindow

    UIWindow基本使用 ios程序启动完毕后,创建的第一个视图控件就是UIWindow 如果指定了main,系统...

  • UIWindow的使用方法

    UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建...

  • 08-UIWindow

    UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow iOS程序启动完毕后,创建...

  • UIWindow

    UIWindow是一种特殊的UIView,通常在一个app中至少有一个UIWindow iOS程序启动完毕后,创建...

  • app启动,iOS程序完整启动过程及原理

    一:ios程序启动原理 1.执行main函数 2.创建UIApplicationMain 1>创建UIApplic...

  • iOS UIWindow与视图层级调整技巧

    iOS开发·UIWindow与视图层级调整技巧(makeKeyWindow,resignKeyWindow,mak...

网友评论

    本文标题:iOS开发--UIWindow与程序启动原理与两种创建控制器的方

    本文链接:https://www.haomeiwen.com/subject/pcdzhttx.html