我有一些像这样的代码:
void (^testBlock)() = ^ {
NSLog(@"TEST");
};
testBlock();
我可以在定义之后立即调用块:
void (^testBlock)() = ^ {
NSLog(@"TEST");
}();
当块刚被调用一次时,这是一个很好的方法。有什么想法吗?
答案 0 :(得分:1)
当你调用void (^testBlock)() = ^ {...}();
时,你实际上试图保持对块返回的引用,而不是块本身。
Xcode抛出:
Initializing 'void(^__strong)()' with an expression of incompatible type 'void'.
换句话说 - 你的块没有返回任何内容(void),你试图用类型void(^)()
的强引用来保存它,这是你的块类型。
假设你想要一个块的引用,你必须首先声明该块,然后通过你给它的引用的名称来调用它,就像你在第一个片段中所示。
另一方面,如果您希望声明一个块并在不保持的情况下调用它,您只需删除它的引用,然后调用:
^{
NSLog(@"TEST");
}();