在哪个线程中调用iOS完成处理程序块?

时间:2011-03-10 23:55:35

标签: iphone objective-c multithreading objective-c-blocks

例如,在GKScore的{​​{1}}(documentation)中,假设您致电

reportScoreWithCompletionHandler

在哪个线程中调用完成处理程序:主线程,与[score reportScoreWithCompletionHandler:^(NSError *error) { // do some stuff that may be thread-unsafe }]; 相同的线程被调用,或者是另一个线程(可能是实际得分报告完成的线程)?

换句话说,在完成处理程序中完成的工作是否需要是线程安全的(例如,它在什么线程中完成并不重要?)

2 个答案:

答案 0 :(得分:6)

实际上并不重要。

如果你需要在主线程中运行你的完成,只需将它发送到主线程:

[score reportScoreWithCompletionHandler:^(NSError *error) {
    dispatch_async(dispatch_get_main_queue(), ^{
        // do your stuff here
    });
}];

答案 1 :(得分:0)

没有用于完成处理程序的特定线程,苹果documentation表示它将是辅助线程(绝对不是主线程)。您可以使用DispatchQueue访问iOS中的不同线程。