iOS -- 应用程序启动时调用方法顺序分析

  • 程序启动分为两类:

    1. 有 Storyboard

    2. 没有 Storyboard

  • 启动步骤如下:

    ① 加载 main 函数

    ② 在 main 函数里的 UIApplicationMain 方法中创建 Application 对象和 Application 的 delegate 对象

    ③ 创建主循环,代理对象开始监听事件

    ④ 调用 didFinishLaunchingWithOptions 方法,并在这个方法中创建 UIWindow

    ⑤ 设置 UIWindow 的根控制器

    ⑥ 如果有 Storyboard,会根据 info.plist 找到应用程序的入口 Storyboard 并加载箭头所指的控制器

    ⑦ 显示窗口

  • 本文考虑的是步骤 3 到步骤 7 将要调用的方法,其中有 AppDelegate,ViewController,View,ChildView 的方法:

    1. load:这是应用程序启动就会调用的方法,在这个方法里写的代码最先调用。

    2. initialize:这个方法里一般写设置导航控制器的主题之类的。

    3. application:didFinishLaunchingWithOptions::这个方法里面会创建 UIWindow,设置根控制器并展现。

    4. loadView:这个方法里创建视图的层次结构,这里需要注意,在没有创建控制器的 view 的情况下不能直接写 self.view,因为 self.view 的底层是通过懒加载方式创建的,否则会造成死循环。如果重写了这个方法,但里面什么都不写,会显示黑屏。

    5. viewDidLoad:在这个方法中加载视图。

    6. View 的 initWithCoder: 方法(通过 Xib 创建)或者 initWithFrame: 方法(通过代码创建):这个方法来初始化 View。

    7. View 的 awakeFromNib 方法:只有通过 Xib 方式创建的才会调用此方法,可在此方法中对 View 做一些操作。

    8. ChildView 的 initWithCoder: 方法(通过 Xib 创建)或者 initWithFrame: 方法(通过代码创建):这个方法来初始化 ChildView。

    9. ChildView 的 awakeFromNib 方法:只有通过 Xib 方式创建的才会调用此方法,可在此方法中对 ChildView 做一些操作。

    10. viewWillAppear::视图将要出现,这个方法用的非常多,比如如果要设置导航栏的 setNavigationBarHiden:animate: 一般在这里写,防止卡跳。

    11. applicationDidBecomeActive::这是 AppDelegate 的应用程序获取焦点方法,真正到了这里,所有东西才全部加载完毕,应用程序整装待发保持最佳状态等待用户操作。

    12. viewWillLayoutSubviews:视图将要布局子视图,苹果建议的设置界面布局属性的方法。

    13. viewDidLayoutSubviews:到了这里,视图布局全部完成。

    14. View 的 layoutSubviews 方法:调整 View 的子视图的布局,在这个方法里一般设置子控件的 frame。

    15. ChildView 的“layoutSubviews”方法:调整 ChildView 的子视图的布局,在这个方法里一般设置子控件的 frame。

    16. View 的 drawRect: 方法:View 的子控件内部的画图方法,有时候需要用到 Quartz2D 的知识,此方法只能在加载时调用一次,如果后面还需要调用,比如下载进度的圆弧,需要一直刷帧,就要使用 setNeedsDisplay 来定时多次调用本方法。

    17. ChildView 的 drawRect: 方法:ChildView 的子控件内部的画图方法。

    18. viewDidAppear::视图完全加载完成。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值