Objective-c调用appdelegate方法的队列

时间:2014-06-19 10:48:02

标签: ios objective-c

UIApplicationDelegate我们有类似的方法:

- (void)applicationWillEnterForeground:(UIApplication *)application

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

几乎每次applicationWillEnterForeground首先调用,但我发现有时didReceiveLocalNotification首先调用,但很少。我试图找到一些关于此的解释,但没有任何结果。在https://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/iphoneappprogrammingguide.pdf我没有找到此信息

我在iOS 8 beta和iOS 7.1中遇到的这种现象在不同设备中。也许有人知道为什么或者可能有文档链接描述了这种调用appdelegate方法的奇怪现象

1 个答案:

答案 0 :(得分:0)

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification

每次收到本地通知时都会被调用并且应用程序被打开(在后台或前台),而

- (void)applicationWillEnterForeground:(UIApplication *)application
仅当应用程序即将成为前台应用程序时才会调用

。这两种方法并不直接相关,因为如果您的应用程序已打开且位于前台,则applicationWillEnterForeground已被调用,并且每次收到新通知时都会调用didReceiveLocalNotification,如果应用程序已打开但在后台仅调用didReceiveLocalNotification,除非用户在收到应用程序后打开应用程序(因此也会调用applicationWillEnterForeground)。如果应用程序根本没有打开且应用程序收到推送通知,那么如果用户通过与通知交互打开应用程序,则不会调用任何方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
将使用UIApplicationLaunchOptionsRemoteNotificationKey字典中设置的密钥launchOptions来调用

一般来说,你不应该期望一个人在另一个之前被调用,因为这两个方法并不是严格相关的,也许你想通过其他方式实现。如果是这种情况,您应该根据目标扩展答案,以获得有关如何执行此操作的建议。