2

做这样的事情要做什么?

void (^)(void) *someBlock = ^{
  //some code
};
4

2 回答 2

7

德米特里的回答完全正确。将块语法视为 C 函数声明:

// C function -> <return type> <function name> (<arguments>)
void someFunction(void) 
{
  // do something
}

// block -> <return type> (^<block variable name>) (<arguments>)
void (^someBlock)(void) = ^{
    // do something
};

另一个例子:

// C function
int sum (int a, int b)
{
    return a + b;
}

// block
int (^sum)(int, int) = ^(int a, int b) {
    return a + b;
};

因此,只需将块语法视为 C 函数声明:首先是返回类型int,然后是块变量的名称,(^sum)然后是参数类型列表(int, int)

但是,如果您的应用程序中经常需要某种类型的块,请使用 typedef:

typedef int (^MySumBlock)(int, int);

现在您可以创建以下MySumBlock类型的变量:

MySumBlock debugSumBlock = ^(int a, int b) {
    NSLog(@"Adding %i and %i", a, b);
    return a + b;
};

MySumBlock normalSumBlock = ^(int a, int b) {
    return a + b;
};

希望有帮助:)

于 2013-04-23T09:06:04.730 回答
2

只是块语法

void (^someBlock)(void) = ^{
     //some code
};
于 2013-04-23T08:53:28.297 回答