我应该根据以下类结构复制传递给[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
答案 0 :(得分:2)
如果存储块以便稍后运行(通常在某些属性中),则必须复制它,因为Objective C中的块是在堆栈中创建的。对于属性,使用copy
声明它是一种常见方法:
@property(copy) block_declaration block_name;
如果你不存储一个块供以后使用并立即调用(就像你的情况一样) - 你不必复制它。
答案 1 :(得分:1)
首先,您不需要在ARC下手动复制块(如果需要,它们会自动从堆栈移动到堆 。)
在您的情况下,您不需要复制它,因为在 fun1
结束之前,您的块被称为,它会堆叠排水。