Objc Block Copy

时间:2015-08-14 17:54:12

标签: ios objective-c objective-c-blocks

我应该根据以下类结构复制传递给[c2 fun2:]的块吗?

@implementation Class1 {
    Class2 *c2;
    id var1;
}
- (void) fun1 {
    [c2 fun2:^{
        [var1 someFun];
    }];
}

@end


@implementation Class2

- (void) fun2:(void(^)(void))block {
    [self someFun1];
    block();
}

@end

2 个答案:

答案 0 :(得分:2)

如果存储块以便稍后运行(通常在某些属性中),则必须复制它,因为Objective C中的块是在堆栈中创建的。对于属性,使用copy声明它是一种常见方法:

@property(copy) block_declaration block_name;

如果你不存储一个块供以后使用并立即调用(就像你的情况一样) - 你不必复制它。

答案 1 :(得分:1)

首先,您不需要在ARC下手动复制(如果需要,它们会自动从堆栈移动到堆 。)

在您的情况下,您不需要复制它,因为在 fun1结束之前,您的块被称为,它会堆叠排水。