2009-05-16 12 views

答えて

0

直接ではありません。 performSelector:withObject:afterDelay:を使用する場合、メインスレッドでセレクタが実行されるため、現在のすべての「保留中の」UIイベントが実行された後に定義されますが、これはスクロールまたはアニメーションの途中にある可能性があります1つの連続したイベントとみなされますが、実際には何百もの独立したイベントです。

ただし、performSelectorInBackground:withObject:を使用して類似の方法を実行し、呼び出すメソッドで[NSThread setThreadPriority:0.01]を呼び出すことができます。 UI呼び出しを行うことができないように、バックグラウンドスレッドを開いているので注意してください。ただし、これにより、メインのUIスレッドよりも優先度の低いバックグラウンドスレッドで作業を行うことができます。

+0

ありがとうございました。少なくとも私は赤ちゃんを追いかけていないことを知っています。アニメーションを抑制するために、UIが応答しなくなることがあるのではないかという疑念があるので、これから検討します。 –

5

実際には、performSelector:withObject:afterDelay:はメインスレッドで必ずしも発生する必要はありません。そのために別の方法がありますperformSelectorOnMainThread:withObject:waitUntilDone:performSelector:withObject:afterDelay:のドキュメントは

が遅延した後、デフォルトのモードを使用して現在スレッド上のレシーバのメソッドを呼び出しますと言います。

あなたがバックグラウンドでタスクを実行したい場合は、あなたのタスクを実行する新しいスレッドを起動し、応答性のUIを残している、+[NSThread detachNewThreadSelector:toTarget:withObject:]に見えるかもしれません。別のスレッドを使用して長時間実行するタスクを実行すると、UIがロックされる可能性がありますが、一般的には良い考えですが、複雑さが増します。あなたがスレッディングに慣れていないなら、意味をなさないバグに終わるかもしれません。

上記のコメントでは、アニメーションがUIが応答しなくなることがあると思われると述べています。組み込みのアニメーションサポート(Core AnimationまたはCocoaラッパーの1つ)を使用している場合、アニメーションによってUIが応答しなくなることはありません。応答しないUIとは、実行ループがサービスUIイベントに戻る前に、プログラムがメインスレッドで多くの作業を行っていることを意味します。

関連する問題