Block_copy是递归的吗?

12 cocoa objective-c objective-c-blocks

我有一些代码基本上归结为这个:

-(void)doSomethingWithBlock:(BlockTypedef)block
{
    [Foo doSomethingElseWithBlock:^() {
        block();
    }];
}
Run Code Online (Sandbox Code Playgroud)

Foo doSomethingElseWithBlock:调用Block_copy以及Block_release它收到的块.这在外部范围内是否也是必要的,或者内部Block_copy处理这个吗?

jtb*_*des 8

我引用Apple开发者文档站点上的Blocks Programming Topics指南:

复制块时,如有必要,将复制对该块中其他块的任何引用 - 可以复制整个树(从顶部开始).如果您有块变量并且您从块中引用块,则将复制该块.

复制基于堆栈的块时,会得到一个新块.但是,如果复制基于堆的块,则只需增加该块的保留计数,并将其作为复制函数或方法的返回值返回.