如果我声明一个像^{ DoSomething; }
这样的块并将其放在一个实例变量中,如果我要保留它,我是否需要Block_copy()
?
答案 0 :(得分:11)
是的,你需要复制。不是因为它们是自动释放的,而是因为它们从堆栈开始。请注意,块的行为也类似于常规的Objective-C对象,因此您可以使用常规的copy
消息来复制它们:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
或者,如果你有一个块属性:
@property(copy) dispatch_block_t block;
保留在这里没有用。