[ios基础]IOS应用程序的生命周期问题
—程序的生命周期
a.程序的生命周期是指应用程序启动到应用程序结束整个阶段的全过程
b.每一个IOS应用程序都包含一个UIApplication对象,IOS系统通过该UIApplication对象监控应用程序生命周期全过程
c.每一个IOS应用程序都要为其UIApplication对象指定一个代理对象,并由该代理对象处理UIApplication对象监测到的应用程序生命周期事件。
—IOS应用程序5种状态
1.Not running:应用还没有启动,或者应用正在运行但是途中被系统停止
2.Inactive:当前应用正在前台运行,但是并不接收事件(当前或许正在执行其它代码)。一般每当应用要从一个状态切换到另一个不同的状态时,中途过渡会短暂停留在此状态。唯一在此状态停留时间比较长的情况是:当用户锁屏时,或者系统提示用户去响应某些(诸如电话来电、有未读短信等)事件的时候。
3.Active:当前应用正在前台运行,并且接收事件。这是应用正在前台运行时所处的正常状态。
4.Background:应用处在后台,并且还在执行代码。大多数将 要进入Suspended状态的应用,会先短暂进入此状态。然而,对于请求需要额外的执行时间的应用,会在此状态保持更长一段时间。另外,如果一个应用要求启动时直接进入后台运行,这样的应用会直接从Notrunning状态进入Background状态,中途不会经过Inactive状态。比如没有界面的应用。注此处并不特指没有界面的应用,其实也可以是有界面的应用,只是如果要直接进入background状态的话,该应用界面不会被显示。
5.Suspended:应用处在后台,并且已停止执行代码。系统自动的将应用移入此状态,且在此举之前不会对应用做任何通知。当处在此状态时,应用依然驻留内存但不执行任何程序代码。当系统发生低内存告警时,系统将会将处 于Suspended状态的应用清除出内存以为正在前台运行的应用提供足够的内存。
通过UIApplicationMain函数创建UIApplication对象并指定其代理对象AppDelegate;第三个参数为指定UIApplication的子类来生成UIApplication对象,为nil时由UIApplication类初始化默认对象;第四个参数为指定代理对象。
—UIApplication的代理对象
a.作为UIApplication的代理类,必须要先实现UIApplicationDelegate协议,协议里明确了作为代理应该做或可以做哪些事情。
b.UIApplication对象负责监听应用程序的生命周期事件,并将生命周期事件交由UIApplication代理对象处理。
—UIApplication代理对象生命周期函数详解
-(void)applicationWillResignActive:(UIApplication *)application
说明:当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了
-(void)applicationDidBecomeActive:(UIApplication *)application
说明:当应用程序入活动状态执行,这个刚好跟上面那个方法相反
-(void)applicationDidEnterBackground:(UIApplication *)application
说明:当程序被推送到后台的时候调用。所以要设置后台继续运行,则在这个函数里面设置即可
-(void)applicationWillEnterForeground:(UIApplication *)application
说明:当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。
-(void)applicationWillTerminate:(UIApplication *)application
说明:当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要要设置UIApplicationExitsOnSuspend的键值为YES,ios5设置Application does not run in background的键值为YES。
-(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
说明:ios设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
-(void)applicationDidFinishLaunching:(UIApplication*)application
说明:当程序载入后执行。
-(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url
说明:当打开URL时执行。
UIViewController生命周期
—UIViewController
UIViewController是IOS顶层视图的载体及控制器,用户与程序界面的交互都是由UIViewController来控制的。
UIViewController管理UIView的生命周期及资源的加载与释放。
—UIView
UIView与UIWindow共同展示了应用用户界面。
—UIViewController生命周期事件
-(void)loadView
加载视图资源并初始化视图。当你从Nib文件加载时,一般情况下这里不需要做任何处理。只有在你没有使用Nib加载视图时进行重写。
这里不需要调用[super loadView];
-(void)viewDidLoad
视图载入完成,可以进行自定义数据加载和动态视图的创建
-(void)viewDidUnload
释放视图资源
-(void)viewWillAppear:(BOOL)animated
将要加载出视图
-(void)viewDidAppear:(BOOL)animated
视图出现
-(void)viewWillDisappear:(BOOL)animated
视图即将消失
-(void)viewDidDisappear:(BOOL)animated
视图已经消失