定义后立即调用块

时间:2015-04-01 05:58:44

标签: ios block

我有一些像这样的代码:

void (^testBlock)() = ^ {
    NSLog(@"TEST");
};
testBlock();

我可以在定义之后立即调用块:

void (^testBlock)() = ^ {
    NSLog(@"TEST");
}();

当块刚被调用一次时,这是一个很好的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当你调用void (^testBlock)() = ^ {...}();时,你实际上试图保持对块返回的引用,而不是块本身。 Xcode抛出:

Initializing 'void(^__strong)()' with an expression of incompatible type 'void'.

换句话说 - 你的块没有返回任何内容(void),你试图用类型void(^)()的强引用来保存它,这是你的块类型。

假设你想要一个块的引用,你必须首先声明该块,然后通过你给它的引用的名称来调用它,就像你在第一个片段中所示。

另一方面,如果您希望声明一个块并在不保持的情况下调用它,您只需删除它的引用,然后调用:

^{
    NSLog(@"TEST");
}();