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-应用生命周期相关推荐

  1. iOS线程生命周期的监控

    iOS系统通过Core Services层的Foundation框架提供基于OC语言的NSThread和NSOperationQueue类来实现对线程和线程池的管理和使用.同时也提供了一套基于C语言的 ...

  2. iOS view生命周期

    为什么80%的码农都做不了架构师?>>>    一.view生命周期 1.loadView loadView方法负责创建UIViewController的view,每次访问UIVie ...

  3. IOS ViewController 生命周期

    加载过程 第一步 -(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 第二步 -(void) ...

  4. 详解 Flutter State 生命周期

    一.说明 我们在开发 Android 或 iOS 中经常会用到页面的生命周期. Android Activity 生命周期: onCreate onStart onResume onPause onS ...

  5. iOS多线程全套:线程生命周期,多线程的四种解决方案,线程安全问题,GCD的使用,NSOperation的使用(上)

    2017-07-08 remember17 Cocoa开发者社区 目的 本文主要是分享iOS多线程的相关内容,为了更系统的讲解,将分为以下7个方面来展开描述. 多线程的基本概念 线程的状态与生命周期 ...

  6. 【转】【iOS知识学习】_视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear等的区别及用途...

    原文网址:http://blog.csdn.net/weasleyqi/article/details/8090373 iOS视图控制对象生命周期-init.viewDidLoad.viewWillA ...

  7. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、v...

    2019独角兽企业重金招聘Python工程师标准>>> iOS视图控制对象生命周期-init.viewDidLoad.viewWillAppear.viewDidAppear.vie ...

  8. iOS应用程序生命周期(前后台切换,应用的各种状态)详解

    2019独角兽企业重金招聘Python工程师标准>>> iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的. iOS系统 ...

  9. iOS视图控制对象生命周期-init、viewDidLoad、viewWillAppear、viewDidAppear、viewWillDisappear、view...

    iOS视图控制对象生命周期: init.viewDidLoad.viewWillAppear.viewDidAppear.viewWillDisappear.viewDidDisappear的区别及用 ...

  10. iOS开发-ViewController的生命周期和切换

    ViewController在App开发中是至关重要的一环,无论是页面的展示和数据之间的交互,ViewController提供了一个框架可以管理和构建App应用.iOS中构建App提供了两种方式一种是 ...

最新文章

  1. Coefficients: (1 not defined because of singularities)
  2. 消息中间件选型分析 —— 从 Kafka 与 RabbitMQ 的对比来看全局
  3. Android Gesture 手势识别使用实例 - Android - mobile - ITeye论坛
  4. 经典C语言程序100例之五八
  5. Java逆向基础之AspectJ的Eclipse插件AJDT
  6. php线上问题排查,线上问题排查神器 Arthas
  7. pythondocumentation是什么_怎样阅读Python官方文档
  8. 微信小程序UI组件、开发框架、实用库...
  9. 【Liunx服务器】阿里云服务器下部署多个tomcat服务
  10. 用java写分段函数_使用Java将分段函数转换为CSV文件
  11. FastJson漏洞
  12. 真正的正数、负数、整数等正则表达式,网上好多都是错的
  13. could not find or load the Qt platform plugin windows的解决方法
  14. C# 通过DirectInput 实现手柄操控
  15. 三次hermite插值多项式例题_2点三次Hermite插值多项式解析.ppt
  16. matlab 设置计算精度,matlab计算精度设置
  17. 新手如何Reverces(3自动化逆向篇)
  18. matlab如何以矩阵形式读取TXT格式大量带分隔符号的实验数据
  19. 公众号获取token失败_关于微信公众号开发的Token验证失败该如何解决?
  20. win7matlab2016启动闪退,大白菜修复win7系统启动matlab出现闪退的图文方案

热门文章

  1. pycuda installation error: command 'gcc' failed with exit status 1
  2. ROS:ubuntu-Ros使用OrbSLAM
  3. ANN:神经网络堆叠/进化故事( 从感知机到DRBN )
  4. [学习笔记]标记永久化
  5. SAP面向iOS设备推Cloud Platform SDK工具
  6. HDU1283 最简单的计算机【模拟】
  7. 【Spark Summit EU 2016】摆脱传统ETL,让我们走向Spark吧!
  8. Tomcat7基于Redis的Session共享实战二
  9. iOS设置tabBarItem.image图片渲染模式
  10. [PyJs系列介绍]三、编译与上线