11

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

4

1 回答 1

11

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

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

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

@property(copy) dispatch_block_t block;

保留在这里没有帮助。

于 2011-01-12T10:01:01.623 回答