使用Objective-C中的ARC从块内访问堆栈块

时间:2013-09-04 14:16:11

标签: objective-c automatic-ref-counting objective-c-blocks

我的问题是关于Objective-C中的块:假设以下情况(启用ARC):

typedef NSString*(^MyBlockType)();
typedef NSString*(^MyReturnBlockType)(MyBlockType);

- (MyReturnBlockType) foo: (MyBlockType) block
{
    return ^NSString*(MyBlockType someBlock) {
        return someBlock();
    };
}

方法block接收的参数foo:在方法返回的块中使用。但是,谁强烈提及blockfoo:应该在返回MyReturnBlockType - 块之前复制块吗?任何见解都将不胜感激。

1 个答案:

答案 0 :(得分:1)

  1. 参数block未在代码中的任何位置使用。

  2. 假设您打算在block内使用someBlock。复制块时,将保留块捕获的对象指针类型的变量。此外,复制块时,块复制的指针类型的变量将被复制。因此,在复制someBlock时,将复制block

  3. 在ARC中,在返回之前会自动复制直接返回的堆栈块。因此,someBlockblock将被复制。

  4. 不,foo:不需要显式复制block,因为它没有做任何事情来显式存储它(在实例变量或其他东西中)。