Objective-C块是否已自动释放?

时间:2011-01-12 09:46:56

标签: objective-c objective-c-blocks

如果我声明一个像^{ DoSomething; }这样的块并将其放在一个实例变量中,如果我要保留它,我是否需要Block_copy()

1 个答案:

答案 0 :(得分:11)

是的,你需要复制。不是因为它们是自动释放的,而是因为它们从堆栈开始。请注意,块的行为也类似于常规的Objective-C对象,因此您可以使用常规的copy消息来复制它们:

void storeBlockForLater: (dispatch_block_t) block
{
    [someArray addObject:[[block copy] autorelease]];
}

或者,如果你有一个块属性:

@property(copy) dispatch_block_t block;

保留在这里没有用。