一.iOS中App的程序入口
在C语言程序中,main函数作为一个程序的唯一入口。在Objective-C中App的程序入口同样是一个main函数,不同的是iOS的开发是基于UIApplecation一整套框架和相关配套机制来搭建的。所以开发者应该通过UIApplication的相关回调方法来初始化程序的入口代码。
#import <UIKit/UIKit.h>
#import "AppDelegate.h"
int main(int argc, char * argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
二.iOS中App的状态和生命周期
在iOS App中有5种状态:
Not running(未运行)
:程序没启动。Inactive(未激活)
:程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态。Active(激活)
:程序在前台运行而且接收到了事件。这也是前台App的常规状态。Background(后台)
:程序在后台而且能执行代码,大多数程序进入这个状态后会在在这个状态上停留一会。时间到之后会进入挂起状态 (Suspended)。配合一些可在后台执行的框架可以长期处于 Background 状态。Suspended(挂起)
:程序在后台不能执行代码。系统会自动把程序变成这个状态而且不会发出通知。当挂起时,程序还是停留在内存中的,当系统内存低时,系统就把挂起的程序清除掉,为前台程序提供更多的内存。
在程序状态转换时,UIApplication会通过一些回调来告知程序:
(void)application:didFinishLaunchingWithOptions:(UIApplication *)application
程序打开时回调,用于编写入口代码(指定Root ViewController和其他全局注册的代码)。(void)applicationWillResignActive:(UIApplication *)application
当应用程序将要入非活动状态执行,在此期间,应用程序不接收消息或事件,比如来电话了。(void)applicationDidBecomeActive:(UIApplication *)application
当应用程序入活动状态执行,这个刚好跟上面那个方法相反(void)applicationDidEnterBackground:(UIApplication *)application
当程序被推送到后台的时候调用。(void)applicationWillEnterForeground:(UIApplication *)application
当程序从后台将要重新回到前台时候调用,这个刚好跟上面的那个方法相反。(void)applicationWillTerminate:(UIApplication *)application
当程序将要退出是被调用,通常是用来保存数据和一些退出前的清理工作。这个需要设置 UIApplicationExitsOnSuspend 的键值。(void)applicationDidReceiveMemoryWarning:(UIApplication *)application
iPhone 设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止(void)applicationSignificantTimeChange:(UIApplication*)application
当系统时间发生改变时执行。(void)applicationDidFinishLaunching:(UIApplication*)application
当程序载入后执行。