zoukankan      html  css  js  c++  java
  • iOS程序执行顺序和UIViewController的生命周期

      一、程序的执行顺序

      启动程序

      --- -[AppDelegate application:didFinishLaunchingWithOptions:] ---

      --- -[AppDelegate applicationDidBecomeActive:] ---

      按下 Command + H + SHIFT

      --- -[AppDelegate applicationWillResignActive:] ---
      --- -[AppDelegate applicationDidEnterBackground:] ---

    重新点击 进入程序
     --- -[AppDelegate applicationWillEnterForeground:] ---
      --- -[AppDelegate applicationDidBecomeActive:] ---

    选择 模拟器的Simulate Memory Warning

     
    --- -[AppDelegate applicationDidReceiveMemoryWarning:] ---

      1.application:didFinishLaunchingWithOptions:

    程序首次已经完成启动时执行,一般在这个函数里创建window对象,将程序内容通过window呈现给用户。

      2.applicationWillResignActive(非活动)

    程序将要失去Active状态时调用,比如有电话进来或者按下Home键,之后程序进入后台状态,对应的applicationWillEnterForeground(即将进入前台)方法。

            该函数里面主要执行操作:

            a. 暂停正在执行的任务

            b. 禁止计时器

            c. 减少OpenGL ES帧率

            d. 若为游戏应暂停游戏

      3.applicationDidEnterBackground(已经进入后台)

    对应applicationDidBecomeActive(已经变成前台)

            该方法用来:

            a. 释放共享资源

            b. 保存用户数据(写到硬盘)

            c. 作废计时器

            d. 保存足够的程序状态以便下次修复;

      4.applicationWillEnterForeground(即将进入前台)

    程序即将进入前台时调用,对应applicationWillResignActive(即将进入后台),

    这个方法用来: 撤销applicationWillResignActive中做的改变。

      5.applicationDidBecomeActive(已经进入前台)

    程序已经变为Active(前台)时调用。对应applicationDidEnterBackground(已经进入后台)。

    注意: 若程序之前在后台,在此方法内刷新用户界面

      6.applicationWillTerminate

    程序即将退出时调用。记得保存数据,如applicationDidEnterBackground方法一样。

      二、视图的生命历程

    • [ViewController initWithCoder:]或[ViewController initWithNibName:Bundle]: 首先从归档文件中加载UIViewController对象。即使是纯代码,也会把nil作为参数传给后者。

    • [UIView awakeFromNib]: 作为第一个方法的助手,方法处理一些额外的设置。

    • [ViewController loadView]:创建或加载一个view并把它赋值给UIViewController的view属性。

    • -[ViewController viewDidLoad]: 此时整个视图层次(view hierarchy)已经放到内存中,可以移除一些视图,修改约束,加载数据等。

    • [ViewController viewWillAppear:]: 视图加载完成,并即将显示在屏幕上。还没设置动画,可以改变当前屏幕方向或状态栏的风格等。

    • [ViewController viewWillLayoutSubviews]即将开始子视图位置布局

    • [ViewController viewDidLayoutSubviews]用于通知视图的位置布局已经完成

    • [ViewController viewDidAppear:]:视图已经展示在屏幕上,可以对视图做一些关于展示效果方面的修改。

    • [ViewController viewWillDisappear:]:视图即将消失

    • [ViewController viewDidDisappear:]:视图已经消失

    • [ViewController dealloc:]:视图销毁的时候调用

       三、总结:

    • 只有init系列的方法,如initWithNibName需要自己调用,其他方法如loadView和awakeFromNib则是系统自动调用。而viewWill/Did系列的方法则类似于回调和通知,也会被自动调用。

    • 纯代码写视图布局时需要注意,要手动调用loadView方法,而且不要调用父类的loadView方法。纯代码和用IB的区别仅存在于loadView方法及其之前,编程时需要注意的也就是loadView方法。

    • 除了initWithNibName和awakeFromNib方法是处理视图控制器外,其他方法都是处理视图。这两个方法在视图控制器的生命周期里只会调用一次。

  • 相关阅读:
    打造基于CentOS7的xfce最简工作环境
    Linux下C程序的编辑,编译和运行以及调试
    修正 XE6 TListView 上方 SearchBok 右边的清除钮显示
    TabControl 显示彩色的图示 (XE6 Firemonkey)
    TSwitch 中文简繁显示支持(XE6 Android)
    改变 TMemo 的背景颜色 (Firemonkey)
    修正 XE5 Android 键盘三个问题
    Delphi 收藏
    展示 Popup 的使用方法
    ListView 下拉更新 (支持 Android)
  • 原文地址:https://www.cnblogs.com/bigant9527/p/14245427.html
Copyright © 2011-2022 走看看