`
yanwt
  • 浏览: 98800 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

AppDelegate中几个常用的回调调用时机

ios 
阅读更多

本篇文章主要介绍一些UIApplicationDelegate中几个常用的回调方法的调用时机。
以帮助你判断哪些方法倒底放到哪个回调中去实现。

1. – (void)applicationDidFinishLaunching:(UIApplication *)application;
此方法基本已经弃用,改用第2个方法代替。
2. – (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions NS_AVAILABLE_IOS(3_0);
当应用程序启动时(不包括已在后台的情况下转到前台),调用此回调。launchOptions是启动参数,假如用户通过点击push通知启动的应用,这个参数里会存储一些push通知的信息。

3. – (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.
当应用程序全新启动,或者在后台转到前台,完全激活时,都会调用这个方法。如果应用程序是以前运行在后台,这时可以选择刷新用户界面。

4. – (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.
当应用从活动状态主动到非活动状态的应用程序时会调用这个方法。这可导致产生某些类型的临时中断(如传入电话呼叫或SMS消息)。或者当用户退出应用程 序,它开始过渡到的背景状态。使用此方法可以暂停正在进行的任务,禁用定时器,降低OpenGL ES的帧速率。游戏应该使用这种方法来暂停游戏。
调用时机可能有以下几种:锁屏,按HOME键,下接状态栏,双击HOME键弹出低栏,等情况。

5. – (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url;
// Will be deprecated at some point, please replace with application:openURL:sourceApplication:annotation:
这个方法已不再支持,可能会在以后某个版本中去掉。建议用下面第6个方法代替

6. – (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation NS_AVAILABLE_IOS(4_2);
// no equiv. notification. return NO if the application can’t open for some reason
当用户通过其它应用启动本应用时,会回调这个方法,url参数是其它应用调用openURL:方法时传过来的。

7. – (void)applicationDidReceiveMemoryWarning:(UIApplication *)application;
// try to clean up as much memory as possible. next step is to terminate app
当应用可用内存不足时,会调用此方法,在这个方法中,应该尽量去清理可能释放的内存。如果实在不行,可能会被强行退出应用。

8. – (void)applicationWillTerminate:(UIApplication *)application;
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
当应用退出,并且进程即将结束时会调到这个方法,一般很少主动调到,更多是内存不足时是被迫调到的,我们应该在这个方法里做一些数据存储操作。

9. // one of these will be called after calling -registerForRemoteNotifications
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken NS_AVAILABLE_IOS(3_0);
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error NS_AVAILABLE_IOS(3_0);
当客户端注册远程通知时,会回调上面两个方法。
如果成功,则回调第一个,客户端把deviceToken取出来发给服务端,push消息的时候要用。
如果失败了,则回调第二个,可以从error参数中看一下失败原因。
注:注册远程通知使用如下方法:

UIRemoteNotificationType t=UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:t];

10. – (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo NS_AVAILABLE_IOS(3_0);
当应用在前台运行中,收到远程通知时,会回调这个方法。
当应用在后台状态时,点击push消息启动应用,也会回调这个方法。
11. – (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification NS_AVAILABLE_IOS(4_0);
当应用收到本地通知时会调这个方法,同上面一个方法类似。
如果在前台运行状态直接调用,如果在后台状态,点击通知启动时,也会回调这个方法
本地通知可见另一篇文章:http://bluevt.org/?p=70

12. – (void)applicationDidEnterBackground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
// 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.
当用户从台前状态转入后台时,调用此方法。使用此方法来释放资源共享,保存用户数据,无效计时器,并储存足够的应用程序状态信息的情况下被终止后,将应用 程序恢复到目前的状态。如果您的应用程序支持后台运行,这种方法被调用,否则调用applicationWillTerminate:用户退出。

13. – (void)applicationWillEnterForeground:(UIApplication *)application NS_AVAILABLE_IOS(4_0);
// 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.
当应用在后台状态,将要进行动前台运行状态时,会调用此方法。
如果应用不在后台状态,而是直接启动,则不会回调此方法。

分享到:
评论

相关推荐

    AppDelegate详解

    应用程序启动完成后的第一个回调方法,通常用于初始化工作。 9. **application:willChangeStatusBarFrame:** ```objective-c - (void)application:(UIApplication *)application willChangeStatusBarFrame:...

    AppDelegate中定义全局变量

    在AppDelegate类中轻松定义全局变量,几乎和C语言一样来定义。

    (Swift)AppDelegate中启动UI

    在Swift编程语言中,AppDelegate是每个iOS应用的核心组件之一,它是应用程序代理,负责处理应用程序的生命周期事件。在本文中,我们将深入探讨如何在AppDelegate中启动用户界面(UI),以及这背后的原理和最佳实践。...

    swift-无代码入侵获取AppDelegate声明周期

    在Swift开发中,"无代码入侵获取AppDelegate声明周期"是一个技术话题,主要涉及如何在不修改原有AppDelegate.swift文件代码的情况下,监测和利用AppDelegate对象的生命周期事件。这在某些情况下非常有用,比如当需要...

    (OC)AppDelegate中启动UI

    在iOS应用开发中,`AppDelegate` 是每个应用程序的核心组件之一,它是Objective-C(简称OC)中的一个关键类,用于处理应用程序的生命周期事件。标题“(OC)AppDelegate中启动UI”表明我们将探讨如何在`AppDelegate`中...

    iOS两个app之间的相互跳转,并带有回调处理

    在iOS平台上,应用间交互是通过特定的机制实现的,其中一种常见且强大的方式就是使用URL Scheme。本文将深入探讨如何实现iOS应用间的相互跳转以及如何进行回调处理。 URL Scheme是一种自定义的协议,类似于HTTP或...

    URl Scheme的使用以及回调

    2. **处理URL请求**:在TestA的AppDelegate.swift(或对应的AppDelegate.m在Objective-C中)中,重写`application(_:open:options:)`方法,检查传入的URL是否符合预设的URL Scheme,然后进行相应的业务逻辑处理。...

    appdelegate

    代理协议

    [原创]IOS中自定义协议和回调示例附源代码

    在iOS开发中,自定义协议(Protocols)和回调(Delegates)是两种常见的对象间通信方式,它们在实现组件间的交互、事件传递等方面发挥着关键作用。本篇将深入探讨这两个概念,并通过一个名为“DelegateTest”的示例...

    SwiftUI - AppDelegate

    `AppDelegate`(应用程序委托)是iOS应用中的一个核心组件,它是应用的第一个启动对象,并在整个应用生命周期中起到桥梁和协调者的作用。在SwiftUI中,虽然大部分视图和状态管理可以通过纯SwiftUI代码处理,但`...

    iOS开的常见8中传值(初始化传值,代理传值,属性传值,代理传值,block传值,通知传值,NSuserDefault传值,AppDelegate传值)

    例如,当用户从一个ViewController导航到另一个时,可以利用AppDelegate作为中间人,将数据存储在AppDelegate的属性中,然后在目标ViewController中获取。 8. Model层传值: 在MVVM(Model-View-ViewModel)架构中...

    swift-使用通知和runtime-AOP的为AppDelegate瘦身方案

    在Swift开发过程中,`AppDelegate`通常承载了大量的应用初始化和事件处理代码,这使得它变得臃肿,难以维护。为了优化代码结构,我们可以采用通知(Notification)和运行时(Runtime)面向切面编程(AOP)的技术来...

    用php给app发通知及AppDelegate代码

    2. **获取设备令牌**:当用户允许接收通知后,`AppDelegate`会接收到`didRegisterForRemoteNotificationsWithDeviceToken`回调,这里可以获取到设备的唯一标识(设备令牌),并将它发送到服务器,以便服务器知道向...

    appdelegate + cheasemob

    使用场景加载scn文件(scn格式文件是一个基于3D建模的文件,使用3DMax软件可以创建,这里系统有一个默认的3D飞机)--------在右侧我添加了许多3D模型,只需要替换文件名即可 SCNScene *scene = [SCNScene ...

    微信分享+回调

    本教程将详细讲解如何在应用中实现微信分享,并且涵盖回调机制,以便开发者能了解分享状态并进行相应处理。我们将以“微信分享案例”为背景,探讨相关知识点。 首先,我们需要集成微信SDK到项目中。这通常通过在...

    iOS 程序之间相互调用demo

    在iOS开发中,程序之间的相互调用是一种常见的需求,它允许用户从一个应用无缝地跳转到另一个应用,实现特定功能或共享数据。这个“iOS程序之间相互调用demo”显然是一个示例项目,用于演示如何在不同的iOS应用程序...

    iosAppDelegate中的视图随设备旋转而改变

    在iOS开发中,`AppDelegate` 是每个应用程序的核心组件,它作为程序启动时的第一个对象,并在整个应用生命周期中扮演着重要角色。当涉及到用户界面的旋转,`AppDelegate` 可以通过处理设备方向变化来确保视图内容...

    QQ界面登陆

    在iOS开发中,实现QQ登录界面并利用AppDelegate进行值传递是一项常见的任务。QQ登录通常涉及到第三方账号集成,这里我们主要关注QQ SDK的集成以及AppDelegate的角色。以下是对这一知识点的详细阐述: 1. **QQ SDK...

    PluggableApplicationDelegate, 使用基于分离的服务架构的最小 AppDelegate.zip

    PluggableApplicationDelegate, 使用基于分离的服务架构的最小 AppDelegate PluggableApplicationDelegate 简介AppDelegate 是一个传统的错误代码示例。 在应用程序生命周期中调用的方法中将许多不同的代码组合在...

Global site tag (gtag.js) - Google Analytics