? 开发应用程序都要了解其生命周期,开始接触android时也是从应用程序生命周期开始的,android的应用程序生命周期更多是其组件的生命周期,例如Activity、Service。今天我们接触一下iOS应用程序的生命周期,
? ? ? ?iOS的入口在main.m文件:
[cpp]?view plain?copy
int?main(int?argc,?char?*argv[])??
{??
????@autoreleasepool?{??
return?UIApplicationMain(argc,?argv,?nil,?NSStringFromClass([AppDelegate?class]));??
????}??
}??
?main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致。
? ? ? ?UIApplicationMain函数,前两个和main函数一样,重点是后两个,官方说明是这样的:
[cpp]?view plain?copy
//?If?nil?is?specified?for?principalClassName,?the?value?for?NSPrincipalClass?from?the?Info.plist?is?used.?If?there?is?no??
//?NSPrincipalClass?key?specified,?the?UIApplication?class?is?used.?The?delegate?class?will?be?instantiated?using?init.??
UIKIT_EXTERNint?UIApplicationMain(int?argc,?char?*argv[],?NSString?*principalClassName,?NSString?*delegateClassName);??
? ? ? ?后两个参数分别表示程序的主要类(principal class)和代理类(delegate class)。如果主要类(principal class)为nil,将从Info.plist中获取,如果Info.plist中不存在对应的key,则默认为UIApplication;如果代理类(delegate class)将在新建工程时创建。
根据UIApplicationMain函数,程序将进入AppDelegate.m,这个文件是xcode新建工程时自动生成的。下面看一下AppDelegate.m文件,这个关乎着应用程序的生命周期。
[cpp]?view plain?copy
-?(BOOL)application:(UIApplication?*)application?didFinishLaunchingWithOptions:(NSDictionary?*)launchOptions??
{??
????self.window?=?[[[UIWindow?alloc]?initWithFrame:[[UIScreen?mainScreen]?bounds]]?autorelease];??
//?Override?point?for?customization?after?application?launch.??
????self.window.backgroundColor?=?[UIColor?whiteColor];??
????[self.window?makeKeyAndVisible];??
NSLog(@"iOS_didFinishLaunchingWithOptions");??
return?YES;??
}??
-?(void)applicationWillResignActive:(UIApplication?*)application??
{??
//?Sent?when?the?application?is?about?to?move?from?active?to?inactive?state.?This?can?occur?for?certain?types?of?temporary?interruptions?(such?as?an?incoming?phone?call?or?SMS?message)?or?when?the?user?quits?the?application?and?it?begins?the?transition?to?the?background?state.??
//?Use?this?method?to?pause?ongoing?tasks,?disable?timers,?and?throttle?down?OpenGL?ES?frame?rates.?Games?should?use?this?method?to?pause?the?game.??
NSLog(@"iOS_applicationWillResignActive");??
}??
-?(void)applicationDidEnterBackground:(UIApplication?*)application??
{??
//?Use?this?method?to?release?shared?resources,?save?user?data,?invalidate?timers,?and?store?enough?application?state?information?to?restore?your?application?to?its?current?state?in?case?it?is?terminated?later.???
//?If?your?application?supports?background?execution,?this?method?is?called?instead?of?applicationWillTerminate:?when?the?user?quits.??
NSLog(@"iOS_applicationDidEnterBackground");??
}??
-?(void)applicationWillEnterForeground:(UIApplication?*)application??
{??
//?Called?as?part?of?the?transition?from?the?background?to?the?inactive?state;?here?you?can?undo?many?of?the?changes?made?on?entering?the?background.??
NSLog(@"iOS_applicationWillEnterForeground");??
}??
-?(void)applicationDidBecomeActive:(UIApplication?*)application??
{??
//?Restart?any?tasks?that?were?paused?(or?not?yet?started)?while?the?application?was?inactive.?If?the?application?was?previously?in?the?background,?optionally?refresh?the?user?interface.??
NSLog(@"iOS_applicationDidBecomeActive");??
}??
-?(void)applicationWillTerminate:(UIApplication?*)application??
{??
//?Called?when?the?application?is?about?to?terminate.?Save?data?if?appropriate.?See?also?applicationDidEnterBackground:.??
NSLog(@"iOS_applicationWillTerminate");??
}??
1、application didFinishLaunchingWithOptions:当应用程序启动时执行,应用程序启动入口,只在应用程序启动时执行一次。若用户直接启动,lauchOptions内无数据,若通过其他方式启动应用,lauchOptions包含对应方式的内容。
2、applicationWillResignActive:在应用程序将要由活动状态切换到非活动状态时候,要执行的委托调用,如 按下 home 按钮,返回主屏幕,或全屏之间切换应用程序等。
3、applicationDidEnterBackground:在应用程序已进入后台程序时,要执行的委托调用。
4、applicationWillEnterForeground:在应用程序将要进入前台时(被激活),要执行的委托调用,刚好与applicationWillResignActive 方法相对应。
5、applicationDidBecomeActive:在应用程序已被激活后,要执行的委托调用,刚好与applicationDidEnterBackground?方法相对应。
? ? ?6、applicationWillTerminate:在应用程序要完全推出的时候,要执行的委托调用,这个需要要设置UIApplicationExitsOnSuspend的键值。?
? ? ?
初次启动:
2013-05-24 20:20:31.550 LifeIOS[451:c07] iOS_didFinishLaunchingWithOptions
2013-05-24 20:20:31.551 LifeIOS[451:c07] iOS_applicationDidBecomeActive
按下home键:
2013-05-24 20:22:17.349 LifeIOS[451:c07] iOS_applicationWillResignActive
2013-05-24 20:22:17.350 LifeIOS[451:c07] iOS_applicationDidEnterBackground
点击程序图标进入:
2013-05-24 20:22:56.913 LifeIOS[451:c07] iOS_applicationWillEnterForeground
2013-05-24 20:22:56.914 LifeIOS[451:c07] iOS_applicationDidBecomeActive
程序中没有设置UIApplicationExitsOnSuspend的值,程序不会彻底退出。
? ? ?看上面iOS的生命周期,是不是和Android的Activity生周期也相似,所以说程序是相通的,对比着学习也是收获最大的。
想学习ios开发的可以加我的qq群,我会发资料和源码在里面: