2

iOS でのマルチスレッドをより詳細に理解しようとしています。NSThread、、などのクラス参照をいくつか調べましNSRunLoopNSTask

まず、次のリンクに示されているように: runloop の使用

Runloop内で実行されますThread

では、なぜRunloopアプリで独自に定義する必要があるのでしょうか? その場合、NSThread時間のかかるプロセスの一部を別のスレッドで実行できるため、アプリは引き続きメイン スレッドで応答するので便利です。

4

2 に答える 2

4

スレッドの実行ループと対話すると、定期的に作業を継続したいスレッドがある場合に役立ちます。つまり、実行ループは何らかの作業を行い、その作業が終了すると、スレッドをしばらく休ませ、後で作業を再開します。つまり、スレッドが終了するのを効果的に防ぎます。それらと対話したり、自分で定期的に構成/作成したりする必要はありません (Foundation などの高レベルの抽象化を使用している場合、ほとんどのシナリオで Foundation がユーザーに代わって設定するため、対象となるアプリの割合はごくわずかです)。

セカンダリ スレッドが指定されたタスクを実行するだけで、何らかの外部イベント (ダウンロードの終了など) を待つ必要がない場合、(通常) 実行ループと対話する必要はありません。

于 2012-10-18T22:18:54.357 に答える
0

の使用を検討することもできますがNSOperationQueues、代わりにこれらが自己管理するため、タスクのキャンセルが可能になり、メイン スレッドとバックグラウンド スレッドでスケジュールできます。NSOperationsNSBlockOperations

于 2012-10-18T22:09:58.553 に答える