2011-01-12 65 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