2013-03-09 14 views
38

W C/Obj-C, robimy typedef taki jak ten typedef int MYINT;, który jest czysty.Jak działa wpisywanie bloku?

Doing typedef dla bloku - typedef void (^MyBlock) (int a);

Teraz możemy użyć MyBlock.

Czy to nie powinno być - typedef void (^MyBlock) (int a) MyBlock; podobne do #define?

Jak działa składnia?

Odpowiedz

59

Zobacz Declaring a Block Reference w "bloków programowych wątkach":

zmienne bloku przytrzymaj odniesień do bloków. Deklarujesz je, używając składni podobnej do tej, której używasz do zadeklarowania wskaźnika do funkcji, z tą różnicą, że używasz^zamiast *.

Więc

typedef void (^myBlock) (int a); 

definiuje typ bloku przy użyciu tej samej składni jak

typedef void (*myFunc) (int a); 

deklaruje wskaźnik funkcji.

Zobacz np. Understanding typedefs for function pointers in C, aby uzyskać więcej informacji na temat wskaźników funkcji.

17

Również z „bloków programowych Tematy”, tworząc rodzaj bloków powinno być tak:

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

Poniżej jest bardzo prosty praktyczny przykład:

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

Proste i jasne Fragment kodu – Jasmeet

Powiązane problemy