Iphone 在哪个线程中调用iOS完成处理程序块?
例如,在Iphone 在哪个线程中调用iOS完成处理程序块?,iphone,objective-c,multithreading,objective-c-blocks,Iphone,Objective C,Multithreading,Objective C Blocks,例如,在GKScore的reportScoreWithCompletionHandler()中,假设您调用 [score reportScoreWithCompletionHandler:^(NSError *error) { // do some stuff that may be thread-unsafe }]; 将在哪个线程中调用完成处理程序:主线程、调用了与reportScoreWithCompletionHandler相同的线程,或者不同的线程(可能是完成实际分数报告的线程)
GKScore
的reportScoreWithCompletionHandler
()中,假设您调用
[score reportScoreWithCompletionHandler:^(NSError *error) {
// do some stuff that may be thread-unsafe
}];
将在哪个线程中调用完成处理程序:主线程、调用了与reportScoreWithCompletionHandler
相同的线程,或者不同的线程(可能是完成实际分数报告的线程)
换句话说,在完成处理程序中完成的工作是否需要是线程安全的(例如,它在哪个线程中完成并不重要)?实际上,这并不重要 如果需要在主线程中运行完成,只需将其分派到主线程:
[score reportScoreWithCompletionHandler:^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// do your stuff here
});
}];
对于完成处理程序没有特定的线程,苹果表示它将是一个辅助线程(肯定不是主线程)。您可以使用访问iOS中的不同线程。很有趣。这个循环是否与运行循环完美交叉?(也就是说,当调用完成处理程序时,是否会在下一次运行循环迭代之前调用已调度的任务,或者会有一些延迟?)我认为主线程运行循环将处理排队的块,作为正常事件处理周期的一部分。所以它应该“很快”就会发生,但和所有与runloop相关的事情一样,时间并不能保证。真的很有趣。我使用UIPrintInteractionController的完成处理程序,它总是在主线程上被调用。