如何在块功能中引用当前块对象?

nie*_*bot 1 objective-c objective-c-blocks

我知道块调制器在调用时会在堆栈上传递给块函数.是否有一个变量名称,我可以在我的代码中引用它(比如self_cmd方法)

(^{
    // how can I access the block descriptor here?
})();
Run Code Online (Sandbox Code Playgroud)

编辑

我实际上想要块对象,而不是块描述符...

bbu*_*bum 6

总之,你不能.至少不是直接的(没有什么类似于self一个块 - 我们认为这很长很难,但是根据以下模式无法提出既优雅又不足以支持添加此类语法的理由) .

如果要引用块,则需要执行以下操作:

__block void(^strawberryFields)();
strawberryFields = ^{ strawberryFields(); };
strawberryFields();
Run Code Online (Sandbox Code Playgroud)

请注意,以上内容将永远运行.另请注意,如果您打算稍后使用该块,则可能需要在分配时复制该块.


考虑:

 NSMutableArray *array = [NSMutableArray array];
 int i;
 for(i = 0; i<5; i++) {
    [array addObject:[^{ return i*i; } copy]];
 }
Run Code Online (Sandbox Code Playgroud)

你将得到一个包含5个块的数组,每个数据块捕获不同的i值.