是的,你需要复制。不是因为它们是自动释放的,而是因为它们从堆栈开始。请注意,块的行为也类似于常规的 Objective-C 对象,因此您可以使用常规copy
消息复制它们:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
或者,如果您有一个块属性:
@property(copy) dispatch_block_t block;
保留在这里没有帮助。