IOS应用生命周期
和Android类似,IOS应用也有五种生命周期。
- 未运行(Not running)
程序没启动
- 未激活(Inactive)
非活跃状态,程序在运行状态 - > 后台状态时,会先进入这个状态。应用从一个状态到另一个状态时,都会短暂经过这个状态。 比如手机锁屏时,用户来电、未读短信,会长期处于这种状态。
- 激活(Active)
活跃状态,程序可以和用户交互。
- 后台(Background)
程序进入后台,程序的代码还可以执行
- 挂起(Suspended)
程序还在内存中,但是不能执行代码。
和Android,应用程序切换的时候也有七个方法:
-
application: willFinishLaunchingWithOptions:
应用启动后进入Inactive状态时调用。 -
application: didFinishLaunchingWithOptions:
在应用启动即将进入到Active状态之前调用此方法。在此方法结束运行之前app会一直处于开屏状态,所以尽快结束此方法可以给用户app启动很快的感觉。如果你开屏开了20秒还在开,系统会直接杀掉进程。 -
applicationDidBecomeActive:
从Inactive状态切换到Active状态时调用 -
applicationWillResignActive:
从Active状态进入Inactive状态时调用 -
applicationDidEnterBackground:
进入Background状态时调用,系统限制这个方法执行时间为5秒,苹果认为对于大多数app而言,5秒钟足以完成任何重要任务。When your app moves to the background, the system calls your app delegate’s applicationDidEnterBackground: method. That method has five seconds to perform any tasks and return. Shortly after that method returns, the system puts your app into the suspended state. For most apps, five seconds is enough to perform any crucial tasks, but if you need more time, you can ask UIKit to extend your app’s runtime.
-
applicationWillEnterForeground:
从Background状态切换到Inactive状态时调用(从桌面返回APP) -
applicationWillTerminate:
app被关闭时(进入Not Running状态)调用。
如果应用不支持后台运行,则在按下Home键返回桌面时,应用会先进入Inactive状态,然后正常进入Background状态,当Background状态结束后此方法会被调用,应用直接被关闭,不会进入Suspended状态;如果应用支持后台运行,则在应用被用户手动关闭或者被系统从内存中清除时会调用此方法。
UI方面
UIKit
存在10多年,框架成熟,效率高,第三方库丰富,UIKit基于MVC设计模式
SwiftUI
新技术,IOS 13以上兼容,开发效率高,运行效率略低,SwiftUI的未来还未到来。