私はそれがはるかに効率的であることをわからないんだけど、よりよいコードになり...
システムはあなたではなくあなた自身を作成するよりも使用することができますGCDと、いくつかのデフォルトの背景のキューを提供し、それは他のスレッドにキューの負荷を軽減します。そして、それが最も有益であると考えられるときに処理します。この作業を取得するには、超簡単です:
// Dispatch a block of code to a background queue
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue, {
// Do initialisation in the background
...
// Call back to the main queue if you want to update any UI when you are done
dispatch_sync(dispatch_get_main_queue(), {
// Set progress indicator to complete?
});
});
// Handle the progress indicator while the initialisation is happening in the background
とてもいいと単純
---- SWIFT ----
// Dispatch a block of code to a background queue
let queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
dispatch_async(queue) {
// Do initialisation in the background
...
// Call back to the main queue if you want to update any UI when you are done
dispatch_sync(dispatch_get_main_queue()) {
// Set progress indicator to complete?
}
}
// Handle the progress indicator while the initialisation is happening in the background
---- OBJ-C ----これはバックグラウンドキューに初期化をディスパッチし、完了したらメインスレッドにコールバックし、続いて進行インジケータを更新します。
メインキュー以外のキューからUIを更新してはいけません。
希望があれば、私がもっと明確にできるかどうか教えてください。
プログレスバーが表示されているようにやや工夫されているサウンドはかなり簡単で、メインスレッド(SpriteKitがUIKitのようなものならば)でのみ実行でき、ユーザーの進行状況は、ストレージに書き込むことができます。私はバックグラウンドスレッド/タスク/これらの要件のために何が必要なのか分かりません。 – trojanfoe
私は、ゲームがロードされている間、ユーザの進捗インジケータを更新できる一方で、バックグラウンドで実行する必要がある集中的な初期化があることを意味していると思います。 –
ジョージの言葉に加えて、ゲームが始まる前に起動時に初期化コードを実行する必要があります。私のApp Delegateアプリケーションのメインスレッドに保持する:did/willFinishLaunchingWithOptions:起動時に初期化が完了するまでアプリアイコンが一瞬停止する。プログレスバーを持つセカンダリスレッドはそれを防ぎます。しかし、ユーザーの進捗状況を保存することについては、おそらく私はそこに私のデザインを考え直しているでしょう。 – ALTN