2010-12-02 9 views
4

c/cocoaのブロックがメインスレッドとは別のスレッドで実行されているかどうかを知りたい。彼らはUIを応答したままにして、計算コストの高いコードを実行するのに有益でしょうか?ブロックとスレッド

+0

CやObjective-Cに関する質問はありますか? –

+0

私はそれがあなたがブロックをどのように呼び出しているかに依存すると思う... –

+0

@Let_Me_Be面白い質問...技術的にはCレベルで実装されていますが、Objective-Cで使用されているのを見たことがあります。 –

答えて

13

ブロックは、呼び出し可能なオブジェクトにまとめられたコードのスニペットです。彼らがどのように動作するかは、それを呼び出すコードによって決まります。

別のスレッド上のブロックを実行することは可能であるだけでなく、ブロックの概念が導入された理由です。 Grand Central Dispatchをサポートするために存在します。これは、タスク指向モデルの背後にある複雑な並行プログラミングの多くを隠しています。

+2

非常に簡潔な答えです。私はブロックがクロージャのC実装であると付け加えることは価値があると思います。 http://en.wikipedia.org/wiki/Closure_(computer_science) –

+4

最初に来たのは?ブロックまたはGCD? :)実際にブロックはGCDに対して直角に作られましたが、ピーナッツバターやチョコレートのように、彼らはどのようにうまく一緒に働いたかが素早く明らかになりました。 – bbum

1

他のスレッドで実行する必要はありませんが、実行することはできます。それらをNSOperationQueuesまたはGCDキューでスケジューリングすることができます。これらのキューはバックグラウンドスレッドによって排除できます。

はい、これは、メインスレッドから時間のかかる作業を手助けするのに役立つ構成です。しかし、これはブロックが有用であるとは限らず、逆にブロックの有無にかかわらずバックグラウンド処理を行うことができます。

1

GCDを使用して、他のスレッドで発行するブロックをスケジュールできます。 2つは一緒に導入されたので、いずれかの議論では通常、もう一方について言及します。しかし、ブロック自体は本質的にマルチスレッド化メカニズムではありません。

+0

正確に、そして様々な 'enumerateUsingBlocks:' APIによって実証されているように.... – bbum

関連する問題