我知道在后台执行某些操作的2种方法。

1:

[self performSelectorInBackground:<#(SEL)#> withObject:<#(id)#>]


2:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  ...
});


两种方法都帮不了我。我正在向Game Center报告玩家的游戏得分,而当我这样做时,在诸如iPod 4G之类的旧设备上,游戏玩法会明显滞后。但是没有真正的急事。是否可以使此代码在CPU利用率较低的情况下执行?我在游戏结束后执行此操作,但是用户可以立即重新启动游戏,并且在大约2秒钟内几乎看不到任何延迟。

分数报告代码:

- (void) reportScore:(int64_t)score forLeaderboardID:(NSString*)category newBestTime:(BOOL)newBestTime {
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:category];
    scoreReporter.value = score;
    scoreReporter.context = 0;
    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
      //nothing here
    }];
}

最佳答案

使用低优先级队列:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
  ...
});

08-17 22:19