程序启动分为两类:
有 Storyboard
没有 Storyboard
启动步骤如下:
① 加载 main 函数
② 在 main 函数里的 UIApplicationMain 方法中创建 Application 对象和 Application 的 delegate 对象
③ 创建主循环,代理对象开始监听事件
④ 调用
didFinishLaunchingWithOptions方法,并在这个方法中创建 UIWindow⑤ 设置 UIWindow 的根控制器
⑥ 如果有 Storyboard,会根据 info.plist 找到应用程序的入口 Storyboard 并加载箭头所指的控制器
⑦ 显示窗口
本文考虑的是步骤 3 到步骤 7 将要调用的方法,其中有 AppDelegate,ViewController,View,ChildView 的方法:
load:这是应用程序启动就会调用的方法,在这个方法里写的代码最先调用。initialize:这个方法里一般写设置导航控制器的主题之类的。application:didFinishLaunchingWithOptions::这个方法里面会创建 UIWindow,设置根控制器并展现。loadView:这个方法里创建视图的层次结构,这里需要注意,在没有创建控制器的 view 的情况下不能直接写 self.view,因为 self.view 的底层是通过懒加载方式创建的,否则会造成死循环。如果重写了这个方法,但里面什么都不写,会显示黑屏。viewDidLoad:在这个方法中加载视图。View 的
initWithCoder:方法(通过 Xib 创建)或者initWithFrame:方法(通过代码创建):这个方法来初始化 View。View 的
awakeFromNib方法:只有通过 Xib 方式创建的才会调用此方法,可在此方法中对 View 做一些操作。ChildView 的
initWithCoder:方法(通过 Xib 创建)或者initWithFrame:方法(通过代码创建):这个方法来初始化 ChildView。ChildView 的
awakeFromNib方法:只有通过 Xib 方式创建的才会调用此方法,可在此方法中对 ChildView 做一些操作。viewWillAppear::视图将要出现,这个方法用的非常多,比如如果要设置导航栏的setNavigationBarHiden:animate:一般在这里写,防止卡跳。applicationDidBecomeActive::这是 AppDelegate 的应用程序获取焦点方法,真正到了这里,所有东西才全部加载完毕,应用程序整装待发保持最佳状态等待用户操作。viewWillLayoutSubviews:视图将要布局子视图,苹果建议的设置界面布局属性的方法。viewDidLayoutSubviews:到了这里,视图布局全部完成。View 的
layoutSubviews方法:调整 View 的子视图的布局,在这个方法里一般设置子控件的 frame。ChildView 的“layoutSubviews”方法:调整 ChildView 的子视图的布局,在这个方法里一般设置子控件的 frame。
View 的
drawRect:方法:View 的子控件内部的画图方法,有时候需要用到 Quartz2D 的知识,此方法只能在加载时调用一次,如果后面还需要调用,比如下载进度的圆弧,需要一直刷帧,就要使用setNeedsDisplay来定时多次调用本方法。ChildView 的
drawRect:方法:ChildView 的子控件内部的画图方法。viewDidAppear::视图完全加载完成。
iOS -- 应用程序启动时调用方法顺序分析
最新推荐文章于 2021-03-26 08:59:12 发布
本文详细介绍了iOS应用从启动到视图展示的整个过程,包括Storyboard的使用与不同方法的作用时机,如load、initialize、didFinishLaunchingWithOptions等,并解释了它们在启动过程中的作用。

274

被折叠的 条评论
为什么被折叠?



