老生常谈iOS应用程序生命周期

发布时间 - 2026-01-11 00:47:05    点击率:

开发应用程序都要了解其生命周期。

今天我们接触一下iOS应用程序的生命周期, iOS的入口在main.m文件:

int main(int argc, char * argv[]) { 
  @autoreleasepool { 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 
  } 
} 

main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致。UIApplicationMain函数,前两个和main函数一样,重点是后两个,官方说明是这样的:

// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no 
// NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init. 
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString * __nullable principalClassName, NSString * __nullable delegateClassName); 

如果主要类(principal class)为nil,将从Info.plist中获取,如果Info.plist中不存在对应的key,则默认为UIApplication;如果代理类(delegate class)将在新建工程时创建。

根据UIApplicationMain函数,程序将进入AppDelegate.m,这个文件是xcode新建工程时自动生成的。

应用程序的生命周期(AppDelegate.m):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
  // Override point for customization after application launch. 
  NSLog(@"iOS_didFinishLaunchingWithOptions"); 
  return YES; 
} 
 
- (void)applicationWillResignActive:(UIApplication *)application { 
  // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
  // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
  NSLog(@"iOS_applicationWillResignActive"); 
} 
 
- (void)applicationDidEnterBackground:(UIApplication *)application { 
  // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
  // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
  NSLog(@"iOS_applicationDidEnterBackground"); 
} 
 
- (void)applicationWillEnterForeground:(UIApplication *)application { 
  // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
  NSLog(@"iOS_applicationWillEnterForeground"); 
} 
 
- (void)applicationDidBecomeActive:(UIApplication *)application { 
  // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
  NSLog(@"iOS_applicationDidBecomeActive"); 
} 
 
- (void)applicationWillTerminate:(UIApplication *)application { 
  // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
  NSLog(@"iOS_applicationWillTerminate"); 
}

1、application didFinishLaunchingWithOptions:当应用程序启动时执行,应用程序启动入口,只在应用程序启动时执行一次。若用户直接启动,lauchOptions内无数据,若通过其他方式启动,lauchOptions包含对应方式的内容。

2、applicationWillResignActive:在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用,如 按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。

3、applicationDidEnterBackground:在应用程序已进入后台程序时,要执行的委托调用。

4、applicationWillEnterForeground:在应用程序将要进入前台时(被激活),要执行的委托调用,刚好与applicationWillResignActive 方法相对应。

5、applicationDidBecomeActive:在应用程序已被激活后,要执行的委托调用,刚好与applicationDidEnterBackground 方法相对应。

6、applicationWillTerminate:在应用程序要完全推出的时候,要执行的委托调用,这个需要要设置UIApplicationExitsOnSuspend的键值。

初次启动:

2013-05-24 20:20:31.550 LifeIOS[451:c07] iOS_didFinishLaunchingWithOptions

2013-05-24 20:20:31.551 LifeIOS[451:c07] iOS_applicationDidBecomeActive

按下home键:

2013-05-24 20:22:17.349 LifeIOS[451:c07] iOS_applicationWillResignActive

2013-05-24 20:22:17.350 LifeIOS[451:c07] iOS_applicationDidEnterBackground

点击程序图标进入:

2013-05-24 20:22:56.913 LifeIOS[451:c07] iOS_applicationWillEnterForeground

2013-05-24 20:22:56.914 LifeIOS[451:c07] iOS_applicationDidBecomeActive

程序中没有设置UIApplicationExitsOnSuspend的值,程序不会彻底退出。

以上这篇老生常谈iOS应用程序生命周期就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。


# ios应用生命周期  # 详解iOS应用程序内购/内付费(一)  # IOS应用程序多语言本地化的两种解决方案  # iOS应用程序之间的几种跳转情况详解  # iOS应用程序中通过dispatch队列控制线程执行的方法  # 详解iOS应用程序的启动过程  # 使用设计模式中的Singleton单例模式来开发iOS应用程序  # IOS 应用程序管理的实现  # 应用程序  # 给大家  # 按下  # 相对应  # 启动时  # 都要  # 将在  # 是这样  # 老生常谈  # 已被  # 这两个  # 希望能  # 只在  # 这篇  # 全屏  # 小编  # 中不  # 自动生成  # 大家多多  # 切换到 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在 Pandas 中基于一列条件计算另一列的分组均值  油猴 教程,油猴搜脚本为什么会网页无法显示?  Mybatis 中的insertOrUpdate操作  魔方云NAT建站如何实现端口转发?  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  WEB开发之注册页面验证码倒计时代码的实现  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何有效防御Web建站篡改攻击?  使用spring连接及操作mongodb3.0实例  活动邀请函制作网站有哪些,活动邀请函文案?  Laravel如何实现邮件验证激活账户_Laravel内置MustVerifyEmail接口配置【步骤】  如何在局域网内绑定自建网站域名?  VIVO手机上del键无效OnKeyListener不响应的原因及解决方法  如何快速搭建高效WAP手机网站吸引移动用户?  Laravel如何获取当前用户信息_Laravel Auth门面获取用户ID  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  Laravel怎么实现验证码(Captcha)功能  BootStrap整体框架之基础布局组件  php 三元运算符实例详细介绍  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  jQuery validate插件功能与用法详解  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  javascript中的try catch异常捕获机制用法分析  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  HTML 中如何正确使用模板变量为元素的 name 属性赋值  Python结构化数据采集_字段抽取解析【教程】  简单实现Android验证码  网站制作大概要多少钱一个,做一个平台网站大概多少钱?  北京的网站制作公司有哪些,哪个视频网站最好?  广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?  ,南京靠谱的征婚网站?  图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  东莞专业网站制作公司有哪些,东莞招聘网站哪个好?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  Laravel怎么使用Intervention Image库处理图片上传和缩放  原生JS实现图片轮播切换效果  Laravel怎么在Controller之外的地方验证数据  Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧  Laravel如何使用模型观察者?(Observer代码示例)  北京企业网站设计制作公司,北京铁路集团官方网站?  如何快速生成ASP一键建站模板并优化安全性?  如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南  如何自定义建站之星模板颜色并下载新样式?  linux写shell需要注意的问题(必看)  Android 常见的图片加载框架详细介绍  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何构建满足综合性能需求的优质建站方案?