开发应用程序都要了解其生命周期,开始接触android时也是从应用程序生命周期开始的,android的应用程序生命周期更多是其组件的生命周期,例如Activity、Service。今天我们接触一下iOS应用程序的生命周期,
iOS的入口在main.m文件:
int main(int argc, char *argv[])
{
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}
main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致。
UIApplicationMain函数,前两个和main函数一样,重点是后两个,官方说明是这样的:
// 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_EXTERN int 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文件,这个关乎着应用程序的生命周期。
- (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入门群:83702688
* android开发进阶群:241395671
*/
分享到:
相关推荐
"IOS学习笔记补充1"是对前期学习内容的进一步丰富和完善,旨在帮助开发者更好地理解和掌握iOS开发的关键知识点。这份笔记不仅适用于初学者,对于有一定经验的开发者来说,也是一个有价值的参考资料。 在iOS开发中,...
- iOS应用的基本架构和生命周期管理。 - 如何使用Storyboard和AutoLayout设计适配iPad屏幕的UI。 - 视图控制器间的通信和数据传递。 - 文件系统操作,如保存和加载用户的笔记数据。 - iOS中的多线程和异步编程,以...
这个"ios学习笔记---simpleping"旨在帮助初学者理解如何在iOS应用中实现简单的网络探测功能。 SimplePing是一个基于Objective-C的类,它提供了对ICMP(Internet Control Message Protocol)协议的支持,这个协议被...
7. `AppDelegate.swift/Objective-C`: 应用的代理类,处理应用生命周期中的重要事件。 8. `CoreData`: 如果应用使用了Core Data,这里会包含实体定义、数据模型文件等。 9. `UserDefaults`: 可能用于存储用户的偏好...
这份“iOS学习笔记,技术道路走到黑.zip”资源包含了一个名为"I-Love-iOS_master.zip"的子文件和一个“说明.txt”,它们可能是作者整理的iOS学习路径和代码示例。 首先,Swift语言是苹果公司在2014年WWDC上发布的...
本文档基于给定的“iOS学习笔记”,深入探讨iOS应用程序生命周期的关键概念、阶段以及如何处理这些阶段。 #### 二、基础知识 **1.1 入口点:** iOS应用的入口点位于`main.m`文件中的`main`函数。此函数通过调用`...
这份个人学习笔记将深入探讨iOS开发的核心概念、工具、流程以及最佳实践。 首先,我们要了解iOS开发的基础——Swift编程语言。Swift是Apple在2014年推出的一种现代、安全、强大的编程语言,用于构建iOS、iPadOS、...
【iOS学习笔记】 在iOS开发领域,理解和掌握基础UI组件是至关重要的,因为它们构成了用户与应用程序交互的主要界面。这份笔记将深入探讨一些关键的概念和技术,帮助初学者建立起扎实的iOS开发基础。 首先,我们来...
在Xamarin中开发iOS应用程序,理解程序的启动过程至关重要,因为这关系到应用的性能优化、用户体验以及问题排查。在本学习笔记B02中,我们将深入探讨Xamarin.iOS下的应用启动机制,主要包括以下关键知识点: 1. **...
这份"iOS史上最全的OC笔记"无疑是学习OC语言的重要参考资料。以下是对笔记内容的详细解读: 1. **基础概念**:OC是C语言的超集,它引入了消息传递机制和动态类型,使得代码更具灵活性。笔记会详细解释类、对象、...
3. **App生命周期**:从启动过程到内存管理,理解应用程序的生命周期对于优化性能至关重要。 4. **数据持久化**:包括UserDefaults、SQLite、CoreData等存储方式,用于在应用关闭后保存数据。 5. **网络编程**:...
该压缩包文件“IOS应用源码Demo-录音笔记for ipad(录完上传到dropbox)-毕设学习.zip”提供了一个iOS应用的源代码示例,特别适合那些正在进行毕业设计或者想深入理解iOS应用程序开发的学生。这个应用的核心功能是...
AppDelegate是cocos2d-x框架中的一个关键类,它扮演着应用程序入口点的角色,处理应用程序的生命周期事件。让我们深入探讨AppDelegate及其在cocos2d-x中的作用。 1. AppDelegate.h 文件: 在预编译头文件(`#ifndef...
多线程学习笔记 iOS开发中,多线程是一种常见的技术手段,用于优化应用程序的性能,提升用户体验。多线程的核心是让程序能够并发地执行多个任务,合理地利用设备的计算能力,尤其是在拥有多个核心的处理器上。 ...
这个"ios记事本 iPhone"源代码提供了这样一个基础的实践机会,它包含了一个简单的记事本应用程序的实现,对于想要学习iOS开发,尤其是Objective-C或Swift语言的人来说,这是一个很好的起点。 首先,我们来了解一下...
这个标题揭示了我们正在讨论的是一个专为iPad设计的iOS应用程序的源代码。源代码是软件开发的基础,它是由程序员编写的,用以创建和控制应用行为的原始指令集合。在这个案例中,重点在于“记事本”应用,意味着这是...
同时,还能了解Android应用程序的生命周期管理和数据持久化。此外,源码中可能还涉及到Android的权限管理、通知系统和其他特色功能的实现。对于想要提升Android开发技能或进行跨平台设计的人来说,这个仿IOS记事本源...
【iOS面试宝典——最新版】是一份集大成的面试指南,专为那些准备投身或已经在iOS开发领域摸爬滚打的工程师们量身打造。这份资料包含了开发者在面试过程中可能遇到的各种问题,旨在帮助求职者提升技能,增强自信心,...
### iOS开发内存分配详解 #### 一、内存分配概述 在iOS开发中,理解内存管理是至关重要的。本文档将详细介绍iOS开发中的...希望本文档能够帮助开发者更好地理解iOS开发中的内存分配机制,从而提升应用程序的质量。