GKPlayer
玩家在for循环中是否安全?
for (GKPlayer *player in players) {
[player loadPhotoForSize:GKPhotoSizeSmall withCompletionHandler:^(UIImage *photo, NSError *error) {
if (!error && photo) {
if ([player.playerID isEqualToString:[GKLocalPlayer localPlayer].playerID]) {
currentUser.image = photo;
} else {
otherUser.image = photo;
}
}
}];
}
答案 0 :(得分:1)
是(假设您的代码仅在主线程中执行)
来自Doc
调用此方法时,它会创建一个新的后台任务来处理请求。然后该方法将控制权返回给您的游戏。稍后,当任务完成时,Game Kit会调用您的完成处理程序。 总是在主线程上调用完成处理程序。
您的代码仅在主线程中执行,因此没有线程安全问题。
代码的可能执行顺序是这样的
[player1 loadPhotoForSize...];
[player2 loadPhotoForSize...];
[player3 loadPhotoForSize...];
// method return
// photo for player3 downloaded
completionHandlerForPlayer3(photo, error);
// photo for player1 downloaded
completionHandlerForPlayer1(photo, error);
// photo for player1 downloaded
completionHandlerForPlayer2(photo, error);
一切都发生在主线程上,不可能有线程问题。