以下代码取自Apple Sprite Kit Adventure示例。代码用这样的方式表示方法[self loadSceneAssets];在后台执行并在完成时,在主线程上执行提供的处理程序块。
我的问题是:它是否真的以这种方式工作,因为我无法看到允许块在完成loadSceneAssets后运行的机制。基本上,如果loadSceneAssets需要15秒才能完成,提供的块会等待15秒然后运行,还是会在loadSceneAsset方法启动后立即开始运行?
注意:这背后的想法是场景的资源(SKTextures,SKSpriteNodes等)在场景呈现之前加载并准备就绪。
#pragma mark - Shared Assets
+ (void)loadSceneAssetsWithCompletionHandler:(APAAssetLoadCompletionHandler)handler {
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
// Load the shared assets in the background.
[self loadSceneAssets];
if (!handler) {
return;
}
dispatch_async(dispatch_get_main_queue(), ^{
// Call the completion handler back on the main queue.
handler();
});
});
}