2

開発中のiOSゲームでスムーズなユーザーエクスペリエンスを作成するには、非同期で実行する必要のあるテクスチャとサウンドエフェクトがプリロードされています。

ゲームプレイ中にこれらのゲームリソースをロードするために、NSOperationQueueとNSThreadのどちらかを決定しようとしています。

NSOperationQueueは明らかに勝者のようであり、多くの利点がありますが、この「バックグラウンド」リソース読み込みタスクを効果的に優先的に制御できることを懸念しています。フレームレートに影響します。

NSOperationQueueには「優先度」の概念があるようですが、NSThreadの「優先度」の概念とは異なって見えます。私が間違っている場合は訂正してください。ただし、NSThreadの優先度はシステムで実行されている他のスレッドに関連しており、NSOperationの優先度は他のキューに入れられたタスクに関連するそのタスクの優先度です。

私が知りたいのは…。

デバイスで現在実行されている他のスレッドと比較して、特定のNSOperationQueueタスクの優先度を(相対的な優先度と他のキューに入れられたタスクとではなく)消費できるサイクル数に関連して制御する方法はありますか?

NSOperationQueueのタスク内で、現在のスレッドの優先度を変更しても安全ですか?(NSThreadの+ setPriorityを使用)

4

1 に答える 1

4

NSOperationのインスタンスには、「setQueuePriority:」とともに「setThreadPriority:」メソッドもあります。

これは間違いなくあなたが探しているものです。

- (void)setThreadPriority:(double)priority

指定した値は、オペレーティングシステムの優先度の値にマップされます。指定されたスレッド優先度は、操作のmainメソッドが実行されている間のみスレッドに適用されます。操作の完了ブロックの実行中は適用されません。独自のスレッドを作成する並行操作の場合、カスタムstartメソッドでスレッドの優先度を自分で設定し、操作の終了時に元の優先度をリセットする必要があります。

于 2011-09-21T17:12:52.803 に答える