For example, in GKScore
's reportScoreWithCompletionHandler
(documentation), suppose you call
[score reportScoreWithCompletionHandler:^(NSError *error) {
// do some stuff that may be thread-unsafe
}];
In which thread will the completion handler be called: the main thread, the same thread as reportScoreWithCompletionHandler
was called, or a different thread (presumably the thread that the actual score reporting is done)?
In other words, does the work done in the completion handler need to be thread-safe (as in, it doesn't matter what thread it's done in)?
In practical terms it doesn't matter.
If you need your completion to run in the main thread, just dispatch it to the main thread:
[score reportScoreWithCompletionHandler:^(NSError *error) {
dispatch_async(dispatch_get_main_queue(), ^{
// do your stuff here
});
}];
There is no specific thread for completion handlers, apple documentation says it will be a secondary thread (Definitely not the main thread). You can use DispatchQueue to access different threads in iOS.
来源:https://stackoverflow.com/questions/5267411/in-which-thread-are-ios-completion-handler-blocks-called