10
如果我聲明一個像這樣的塊^{ DoSomething; }
並將其放入一個實例變量,如果我要保留它,是否需要Block_copy()
?Objective-C塊是否自動釋放?
如果我聲明一個像這樣的塊^{ DoSomething; }
並將其放入一個實例變量,如果我要保留它,是否需要Block_copy()
?Objective-C塊是否自動釋放?
是的,你需要複製。不是因爲它們是自動發佈的,而是因爲它們在堆棧上啓動。需要注意的是塊也表現得像普通的Objective-C的對象,這樣就可以使用常規copy
消息複製它們:
void storeBlockForLater: (dispatch_block_t) block
{
[someArray addObject:[[block copy] autorelease]];
}
或者,如果你有一個塊屬性:
@property(copy) dispatch_block_t block;
護不幫助這裏。
謝謝,我還發現了這個關於這個主題的偉大文章:http://cocoawithlove.com/2009 /10/how-blocks-are-implemented-and.html – brian 2011-01-12 11:51:45
注意..對於ARC,一些示例代碼在這裏:http://stackoverflow.com/a/20760583/294884 – Fattie 2014-04-11 15:57:45