我有一些代码基本上可以归结为:

-(void)doSomethingWithBlock:(BlockTypedef)block
{
    [Foo doSomethingElseWithBlock:^() {
        block();
    }];
}
Foo doSomethingElseWithBlock:在收到的块上调用Block_copyBlock_release。在外部范围还是有必要的吗,还是内部Block_copy将处理此问题?

最佳答案

我引用了苹果开发人员文档站点上的Blocks Programming Topics指南:

复制一个块时,如有必要,将复制该块中对其他块的任何引用-可以复制整个树(从顶部开始)。如果您具有块变量,并且从该块中引用了一个块,则将复制该块。
复制基于堆栈的块时,会得到一个新块。但是,如果复制基于堆的块,则只需增加该块的保留计数,然后将其作为复制函数或方法的返回值取回即可。

关于objective-c - Block_copy是递归的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6561265/

10-10 17:15