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

bri*_*ian 11 objective-c objective-c-blocks

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

zou*_*oul 11

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

void storeBlockForLater: (dispatch_block_t) block
{
    [someArray addObject:[[block copy] autorelease]];
}
Run Code Online (Sandbox Code Playgroud)

或者,如果您有块属性:

@property(copy) dispatch_block_t block;
Run Code Online (Sandbox Code Playgroud)

保留在这里没有用.

  • 谢谢,我还发现了这篇关于这个主题的精彩文章:http://cocoawithlove.com/2009/10/how-blocks-are-implemented-and.html (2认同)