iOS App和ViewController的生命周期

应用程序的状态

  • 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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 0. 引子 iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提...
    i爱吃土豆的猫阅读 595评论 0 0
  • 生命周期 2、简述应用生命周期 App启动:当App启动时,首先由not running状态切换到inactive...
    丶逐渐阅读 941评论 3 6
  • iOS应用程序的生命周期 来源: Sam_Lau(@Sam_Lau_Dev ) 链接:http://www.jia...
    简简蜗牛阅读 358评论 0 1
  • iOS应用程序一般都是由自己编写的代码和系统框架(system frameworks)组成,系统框架提供一些基本i...
    Sam_Lau阅读 38,258评论 17 235
  • 今天是母亲节,是个值得庆祝的日子,祝我好妈妈们节日快乐,身体健康!我相信世界上没有什么比母亲对我们更好、更重要的人...
    杨_baec阅读 396评论 0 1

友情链接更多精彩内容