美文网首页
iOS App和ViewController的生命周期

iOS App和ViewController的生命周期

作者: JCYDSHANKS | 来源:发表于2019-07-22 20:22 被阅读0次

    应用程序的状态

    • Not Running:app还没运行
    • Inactive:app运行在前台但没有接收事件 即将活跃
    • Active:app运行在前台和正在接收事件 活跃中
    • Background:运行在后台和正在执行代码 后台
    • Suspended:运行在后台但没有执行代码 挂起

    AppDelegate中的方法

    响应app运行时重要事件,状态之间的转换

    • 程序第一次启动后执行 didFinishLaunchingWithOptions

    • 程序将要失去焦点时执行 applicationWillResignActive

    • 程序得到焦点时执行 applicationDidBecomeActive

    • 程序进入后台执行 applicationDidEnterBackground

    • 程序进入前台执行 applicationDidEnterForeground

    • 程序即将退出时调用 applicationWillTerminate

    • 程序发生内存警告的时候调用 applicationDidReceiveMemoryWarning

    应用程序状态切换

    启动一个App 从Not running -> inactive -> active
    此时调用didFinishLaunchingWithOptions方法,然后inactive切换到active,切换完成调用applicationDidBecomeActive

    当App发生中断时,由active状态切换到inactive状态,此时调用applicationWillResignActive方法

    当切换App时,由状态active切换到inactive,此时调用applicationWillResignActive方法;然后从inactive状态切换到running状态,此时调用applicationDidEnterBackground方法。

    而当切换回本来的app时,由running状态切换到inactive状态,此时调用applicationWillEnterForeground方法,然后由inactive状态切换到active状态,调用applicationDidBecomeActive方法。

    当手机锁屏时,由状态active切换到inactive,此时调用applicationWillResignActive;然后再由inactive状态切换到running状态,此时调用applicationDidEnterBackground方法。

    系统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没有暂停,系统会在应用程序终止之前调用applicationWillTerminate来保存用户的一些重要数据以便下次启动时恢复到app原来的状态。

    iOS App基于MVC

    View与用户交互事件,通过Action-Target的方式来响应View的事件。
    当View需要处理一些特殊UI逻辑或获取数据源时,通过delegate或data source方式交给Controller来处理。
    Model的更新通过Notification和KVO来通知Controller更新View

    ViewController的生命周期

    init

    如果通过xib或storyboard创建,会首先调用该方法

    loadView

    此时VC还未初始化,可以重写该方法自定义控制器的View,若重写逻辑,就不能调用[super loadView]

    viewDidLoad

    在VC的生命周期中,只会被调用一次。此时view已经初始化好,可以做一些页面初始化任务,由于此时view的bounds尚未确定,所以不适合写frame类型的布局代码,但是给视图添加约束没有影响。

    viewWillAppear

    VC的视图将要出现时调用,可能会调用多次,适合做一些与视图相关联的任务,适合做一些与视图出现相关联的任务,例如改变状态栏的方向、风格。

    viewWillLayoutSubviews

    view的子视图即将布局,触发条件是

    • view 被添加到视图层次中
    • view 的 bounds 发生了改变
    • 调用了 - setNeedsLayout方法
    • 调用了 - layoutIfNeeded方法

    viewDidLayoutSubviews

    当 view 的子视图已经布局时,此方法会被调用,触发条件同上。

    viewWillDisappear

    视图即将从屏幕中消失时触发。

    viewDidAppear

    视图从屏幕中消失后触发。

    相关文章

      网友评论

          本文标题:iOS App和ViewController的生命周期

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