6

ブロックの概念を理解しようとしています。私がこれまで読んだことは、概念的にはJavaScriptの無名関数に似ているようです。これは正しいです?

4

2 に答える 2

4

はい、大部分はそうです。ブロックは、周囲のスコープから変数をキャプチャできるオブジェクトのようなものとして扱われる一種のC関数です。匿名関数はブロックと同等ですが、ブロックの舞台裏の機械がかなり複雑であるため、確かに同一ではありません。

たとえば、ブロックを定義する関数/メソッドの後に/外部でブロックを使用する予定がある場合、ブロックをどこかのプロパティとして設定するか、GCD(マルチコア操作キューイング)で使用する場合がこれに該当します。ライブラリ)、 Block_copy()(または)でコピーする必要があります[aBlock copy]。詳細については説明しませんが、これはJS(匿名)関数で行うことではありません。これは、ブロックリテラルがスタックに割り当てられ(コードのどこかに割り当てられていない)、永続化する場合はヒープにコピーする必要があるという事実と関係があります。

非常に複雑になる可能性がありますが(ただし、その設計はかなり美しいです)、ほとんどのユースケースでは、かなり簡単で、匿名のJS関数のように扱うことができます。;-)

于 2013-01-03T18:36:47.780 に答える
3

はい。Objective-Cのブロックはクロージャです。

于 2010-09-16T10:08:46.527 に答える