2011-01-12 24 views
10

如果我声明一个像这样的块^{ DoSomething; }并将其放入一个实例变量,如果我要保留它,是否需要Block_copy()Objective-C块是否自动释放?

+0

注意..对于ARC,一些示例代码在这里:http://stackoverflow.com/a/20760583/294884 – Fattie 2014-04-11 15:57:45

回答

10

是的,你需要复制。不是因为它们是自动发布的,而是因为它们在堆栈上启动。需要注意的是块也表现得像普通的Objective-C的对象,这样就可以使用常规copy消息复制它们:

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

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

@property(copy) dispatch_block_t block; 

护不帮助这里。

+2

谢谢,我还发现了这个关于这个主题的伟大文章:http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian 2011-01-12 11:51:45