1

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

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

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

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

4

1 回答 1

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

  2. 假设您打算使用blockinside someBlock。复制块时保留块捕获的对象指针类型的变量。此外,当复制块时,复制块捕获的指针类型的变量。所以,当被复制时,将被复制。someBlockblock

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

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

于 2013-09-04T22:18:10.573 回答