一.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 *)applicationiPhone 设备只有有限的内存,如果为应用程序分配了太多内存操作系统会终止应用程序的运行,在终止前会执行这个方法,通常可以在这里进行内存清理工作防止程序被终止
  • (void)applicationSignificantTimeChange:(UIApplication*)application当系统时间发生改变时执行。
  • (void)applicationDidFinishLaunching:(UIApplication*)application当程序载入后执行。

results matching ""

    No results matching ""