2013-03-09 7 views
38

C/Obj-Cでは、このようなtypedefはtypedef int MYINT;です。ブロックの型定義はどのように動作するのですか

ブロックのためのtypedefを行う - typedef void (^MyBlock) (int a);

を今、私たちはMyBlockを使用することができます。

typedef void (^MyBlock) (int a) MyBlock;#defineに似ていますか?

構文はどのように機能しますか?

答えて

59

は "ブロックプログラミングトピック" にDeclaring a Block Referenceを参照してください:

ブロック変数はブロックへの参照を保持します。 *の代わりに^を使用する点を除き、 の構文を使用して、関数へのポインタを宣言するのに似た構文、 を宣言します。

だから

typedef void (^myBlock) (int a); 

typedef void (*myFunc) (int a); 

と同じ構文を使用してブロックのタイプは、関数ポインタを宣言し定義します。

関数ポインタの詳細については、Understanding typedefs for function pointers in Cを参照してください。このようにする必要があり、ブロックの型を作成する「ブロックプログラミングトピック」からも

17

、:

typedef returnType (^blockName)(argument1, argument2, ...) 
以下

非常に単純な実用的な例である:

typedef float (^MyBlockType)(float, float); 
MyBlockType AddTwoFloat = ^(float a, float b) {return a + b;}; 
MyBlockType MultiplyTwoFloat = ^(float a, float b) {return a * b;}; 
float c = AddTwoFloat(1, 2); //c = 3 
float d = MultiplyTwoFloat(1, 2); //d = 2 
+0

シンプルで明確なコードスニペット – Jasmeet

関連する問題