Ios DidReceiveEmotentification方法是否总是在主线程上调用?

Ios DidReceiveEmotentification方法是否总是在主线程上调用?,ios,objective-c,multithreading,push-notification,Ios,Objective C,Multithreading,Push Notification,我说的是这个方法: 还有一种说法是: 在多线程应用程序中,通知始终以 发布通知的线程,该线程可能不是 观察者注册自身的同一线程 我想要实现的是,如果应用程序位于前台,则更新我的UITableView(以重新加载数据) 所以我想知道是否有可能在后台线程上调用上面的方法,或者我可以安全地不使用类似的东西 if ([NSThread isMainThread]) { // do the UI stuff as normal } else { dispatch_async(dispat

我说的是这个方法:

还有一种说法是:

在多线程应用程序中,通知始终以 发布通知的线程,该线程可能不是 观察者注册自身的同一线程

我想要实现的是,如果应用程序位于前台,则更新我的UITableView(以重新加载数据)

所以我想知道是否有可能在后台线程上调用上面的方法,或者我可以安全地不使用类似的东西

if ([NSThread isMainThread]) {
    // do the UI stuff as normal
} else {
    dispatch_async(dispatch_get_main_queue(), ^{ /* post notification */ });
}
并通过调用以下方法发布通知:

- (void) helperMethod{

  if([UIApplication sharedApplication].applicationState != UIApplicationStateBackground){
      [[NSNotificationCenter defaultCenter] postNotificationName:@"SOMENAME" object:self];
    }
}
[self performSelectorOnMainThread:@selector(myMethod:) withObject:Nil waitUntilDone:NO];
而不是使用这样的东西:

- (void) helperMethod{

  if([UIApplication sharedApplication].applicationState != UIApplicationStateBackground){
      [[NSNotificationCenter defaultCenter] postNotificationName:@"SOMENAME" object:self];
    }
}
[self performSelectorOnMainThread:@selector(myMethod:) withObject:Nil waitUntilDone:NO];

此外,我还在
viewDidLoad
方法中注册观察者(并在
viewWilldisapear
方法中删除观察者)。

苹果文档中的“与应用程序不同:didReceiveMotonification:method,只有在应用程序在前台运行时才会调用…”,告诉我们,当应用程序在后台时,此方法不会运行。尽管如此,你知道当你的应用程序至少在后台时,它不会被调用。看看这个帖子:@从文档中偷看这句话,不幸的是,有时是真的,有时不是。我将所有内容都记录在磁盘上,当我收到推送通知时,可以清楚地看到应用程序状态==后台。此外,设备未通过usb电缆连接到计算机&Xcode。因此,我非常肯定在某些情况下会调用此方法,而来自文档的语句是非常不正确的。我还启用了一些后台模式,所以这可能就是为什么有时甚至在后台也会调用此方法的原因。唯一没有调用此方法的时间是我终止应用程序时。当然,即使我已终止应用程序,推送通知也会到达,但日志中不会写入任何内容,这与应用程序处于挂起或后台状态不同。除了阅读文档外,我自己没有测试过。您确定没有运行此方法吗,如果没有,但是在我链接的线程中,如果您想确保按照示例中的建议运行,您应该确保运行的线程正确。@完全肯定我使用的是我标题中的方法:)在我上面所述的内容中也是完全肯定的,因为我今天和之前对它进行了多次测试,今天我刚刚确认。请更具体地说明“正确的螺纹”部分。