iOS-应用生命周期
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致。 UIApplicationMain函数,前两个和main函数一样,重点是后两个。后两个参数分别表示程序的主要类(principal class)和代理类(delegate class)。如果主要类(principal class)为nil,将从Info.plist中获取,如果Info.plist中不存在对应的key,则默认为UIApplication;如果代理类(delegate class)将在新建工程时创建。
1、每个应用程序都有属于自己的UIWindow(分为:1、状态栏,2、下面控制器控制的UIView),UIWindow继承自UIView
2、每个控制器都有默认的UIView.
3、一个控制器管理一个UIView.
在PC中,应用程序多是使用视窗的形式显示内容,手机应用也不例外,手机应用中要在屏幕上显示内容首先要创建一个窗口承载内容,iOS应用中使用UIWindow、UIView来实现内容显示。
UIWindow:
UIWindow对象是所有UIView的根视图,管理和协调的应用程序的显示、分发事件给View。UIWindow类是UIView的子类,可以看作是特殊的UIView。一般应用程序只有一个UIWindow对象,即使有多个UIWindow对象,也只有一个UIWindow可以接受到用户的触屏事件。UIWindow初始化在AppDeleDgate里面的didFinishLaunchingWithOptions方法。
UIView:
UIView类继承自UIResponder,负责在屏幕上定义一个矩形区域,视图用于展示界面及响应用户界面交互。每个视图对象都要负责渲染视图区域的内容,并响应该区域中发生的操作事件。除了显示内容和处理事件之外,视图可以嵌套并管理子视图。子视图是指嵌入到另一视图对象内部的视图对象,而被嵌入的视图对象是父视图。视图添加到window中就会显示出来。
根据UIApplicationMain函数,程序将进入AppDelegate.m,这个文件是xcode新建工程时自动生成的。
1、告诉代理进程启动但还没进入状态保存
- (BOOL)application:(UIApplication*)application willFinishLaunchingWithOptions:(NSDictionary*)launchOptions
2、在应用程序加载完毕之后调用
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
3、程序失去焦点的时候调用(不能跟用户进行交互了)当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
- (void)applicationWillResignActive:(UIApplication*)application
4、当应用程序获取焦点的时候调用-获取焦点之后才可以跟用户进行交互当应用程序入活动状态执行,这个刚好跟上面那个方法相反
- (void)applicationDidBecomeActive:(UIApplication*)application
5、当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可 (点击HOME键)
- (void)applicationDidEnterBackground:(UIApplication *)application
6、当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
- (void)applicationWillEnterForeground:(UIApplication *)application
7、当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值。
- (void)applicationWillTerminate:(UIApplication *)application
初次启动:
iOS_didFinishLaunchingWithOptions
iOS_applicationDidBecomeActive
按下home键:
iOS_applicationWillResignActive
iOS_applicationDidEnterBackground
点击程序图标进入:
iOS_applicationWillEnterForeground
iOS_applicationDidBecomeActive
当应用程序进入后台时,应该保存用户数据或状态信息,所有没写到磁盘的文件或信息,在进入后台时,最后都写到磁盘去,因为程序可能在后台被杀死。释放尽可能释放的内存。
- (void)applicationDidEnterBackground:(UIApplication *)application
方法有大概5秒的时间让你完成这些任务。如果超过时间还有未完成的任务,你的程序就会被终止而且从内存中清除。
如果还需要长时间的运行任务,可以在该方法中调用:
[application beginBackgroundTaskWithExpirationHandler:^{
NSLog(@"begin Background Task With Expiration Handler");
}];
程序终止
程序只要符合以下情况之一,只要进入后台或挂起状态就会终止:
①iOS 4.0以前的系统
②app是基于iOS 4.0之前系统开发的。
③设备不支持多任务
④在Info.plist文件中,程序包含了 UIApplicationExitsOnSuspend 键。
系统常常是为其他app启动时由于内存不足而回收内存最后需要终止应用程序,但有时也会是由于app很长时间才响应而终止。如果app当时运行在后台并且没有暂停,系统会在应用程序终止之前调用app的代理的方法 - (void)applicationWillTerminate:(UIApplication *)application,这样可以让你可以做一些清理工作。你可以保存一些数据或app的状态。这个方法也有5秒钟的限制。超时后方法会返回程序从内存中清除。
转载于:https://www.cnblogs.com/onefboy/p/5718035.html
iOS-应用生命周期相关推荐
- iOS线程生命周期的监控
iOS系统通过Core Services层的Foundation框架提供基于OC语言的NSThread和NSOperationQueue类来实现对线程和线程池的管理和使用.同时也提供了一套基于C语言的 ...
- iOS view生命周期
为什么80%的码农都做不了架构师?>>> 一.view生命周期 1.loadView loadView方法负责创建UIViewController的view,每次访问UIVie ...
- IOS ViewController 生命周期
加载过程 第一步 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 第二步 -(void) ...
- 详解 Flutter State 生命周期
一.说明 我们在开发 Android 或 iOS 中经常会用到页面的生命周期. Android Activity 生命周期: onCreate onStart onResume onPause onS ...
- iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)
2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...
- 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...
原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...
2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...
- iOS应用程序生命周期(前后台切换,应用的各种状态)详解
2019独角兽企业重金招聘Python工程师标准>>> iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统 ...
- iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...
iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...
- iOS开发-ViewController的生命周期和切换
ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是 ...
最新文章
- Coefficients: (1 not defined because of singularities)
- 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局
- Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛
- 经典C语言程序100例之五八
- Java逆向基础之AspectJ的Eclipse插件AJDT
- php线上问题排查,线上问题排查神器 Arthas
- pythondocumentation是什么_怎样阅读Python官方文档
- 微信小程序UI组件、开发框架、实用库...
- 【Liunx服务器】阿里云服务器下部署多个tomcat服务
- 用java写分段函数_使用Java将分段函数转换为CSV文件
- FastJson漏洞
- 真正的正数、负数、整数等正则表达式,网上好多都是错的
- could not find or load the Qt platform plugin windows的解决方法
- C# 通过DirectInput 实现手柄操控
- 三次hermite插值多项式例题_2点三次Hermite插值多项式解析.ppt
- matlab 设置计算精度,matlab计算精度设置
- 新手如何Reverces(3自动化逆向篇)
- matlab如何以矩阵形式读取TXT格式大量带分隔符号的实验数据
- 公众号获取token失败_关于微信公众号开发的Token验证失败该如何解决?
- win7matlab2016启动闪退,大白菜修复win7系统启动matlab出现闪退的图文方案
热门文章
- pycuda installation error: command 'gcc' failed with exit status 1
- ROS:ubuntu-Ros使用OrbSLAM
- ANN:神经网络堆叠/进化故事( 从感知机到DRBN )
- [学习笔记]标记永久化
- SAP面向iOS设备推Cloud Platform SDK工具
- HDU1283 最简单的计算机【模拟】
- 【Spark Summit EU 2016】摆脱传统ETL,让我们走向Spark吧!
- Tomcat7基于Redis的Session共享实战二
- iOS设置tabBarItem.image图片渲染模式
- [PyJs系列介绍]三、编译与上线