关于App启动及初始化相关的知识点了解。
系统启动过程
App启动
main
->UIApplicationMain
-> 通知代理
做事情- UIApplicationMain底层实现:
1 | // principalClassName:描述UIApplication的类名字符串 |
程序启动的完整过程
- main函数
UIApplicationMain
- 创建UIApplication对象
- 创建UIApplication的delegate对象
delegate
对象开始处理(监听)系统事件(判断有无storyboard)- A. 根据
Info.plist
获得最主要storyboard的文件名,加载最主要的storyboard(有storyboard)- 创建UIWindow
- 创建和设置UIWindow的rootViewController
- 显示窗口
- B. 没有storyboard
- 程序启动完毕的时候, 就会调用代理的
application:didFinishLaunchingWithOptions:
方法 - 在
application:didFinishLaunchingWithOptions:
中创建UIWindow - 创建和设置UIWindow的rootViewController
- 显示窗口
- 程序启动完毕的时候, 就会调用代理的
1 | // 在开发中通常在程序启动完成的时候手动创建窗口 |
Application生命周期方法介绍
- AppDelegate没有自己创建,系统会默认帮我们创建。
- 处理应用程序的一些生命周期方法:以application开头
1 | // 程序启动完成的时候调用 |
1 | // 当应用程序失去焦点的时候调用 |
1 | // 当应用程序进入后台的时候调用 |
1 | // 当应用程序进入进台的时候调用 |
1 | // 当应用程序获取焦点的时候调用 |
1 | // 当应用程序关闭的时候调用 |
1 | // 当程序接收到内存警告的时候调用 |
类相关的
load
load
方法会在加载
类的时候就被调用,也就是ios应用启动的时候,就会加载所有的类,就会调用每个类的+ load
方法。initialize
initialize
方法会在第一次初始化
这个类之前被调用,我们用它来初始化静态变量。
LoadView
- 什么时候调用:第一次使用控制器的view的时候调用
- 作用:加载控制器的view
- 注意:
- 只要重写loadView,里面就不要调用 [super loadView]
- 在loadView方法中,如果没有给控制器的view赋值,就不能获取控制器的view,否则会导致死循环
一旦重写loadView方法,表示需要自己创建控制器的view
在开发中loadView应用场景:
- 一开始控制器就想要展示一张图片,就可以直接让控制器的view是UIImageView
- UIWedView:展示网页,设置wenbView为控制器View
- 重写LoadView,可以减少内存使用,直接帮你创建控制器最想要的view
[super loadView]
:首先判断下有没有指定storyboard或者指定xib,如果指定了,就会帮你加载指定的控制器的view
1 | - (void)loadView |