大まかなコンセプト 翻訳元
以下のセクションでは実践的な例を使ってブロックを始める手助けをします。
このページの最終更新:2010-03-02
ADCの最終更新:2009-10-19
ADCの最終更新:2009-10-19
目次
ブロックの機能(Block Functionality)
ブロックは次のようなコードのよくある組み込みのコレクションです。
- ちょうど関数のように型付けされた引数リストを持つ。
- 暗黙に、または明確に宣言された戻り値を持つ。
- 定義されたレキシカルスコープから状態を獲得できる。
- レキシカルスコープの状態を任意で変更できる。
- 同じレキシカルスコープで定義されたほかのブロックと変更の可能性を共有できる。
- レキシカルスコープ(スタックフレーム)で定義された状態をそのレキシカルスコープ(スタックフレーム)が破棄された後でも続けて共有、変更できる。
ブロックは複製することも、その実行を譲るためにほかのスレッド(または自身のスレッドのランループ)に渡してしまうことさえできます。コンパイラとランタイムはブロックが参照しているすべての変数がそのブロックのすべての複製の寿命分保護されるように手配しています。ブロックは純粋なCやC++で使えますが、ブロックは常にObjective-Cオブジェクトとしても利用できます。
用法(Usage)
通常、ブロックは小さく自己完結したコード片を表します。[As such, they’re particularly useful as a means of encapsulating units of work that may be executed concurrently, or over items in a collection.]
ブロックの変数との相互作用のおかげで、局所的な状態にアクセスする必要がある状況でも、ブロックは有用なものとなっています。したがって、ブロックはコールバックの代替手段としても有用です。コールバックを使うために、処理を実行するのに必要な前後関係をもった情報を含むデータ構造体を要求しなくても、単にローカル変数に直接アクセスするだけでよいのです。