2013-04-24 44 views
2

我有一個的NSOperation的子類,我想要做這樣的事情:我是否需要Block_copy傳遞給NSOperation的setCompletionBlock的塊:?

@interface MyOperation : NSOperation... 

MyOperation *myOperation = [[MyOperation alloc] init]; 

[myOperation setCompletionBlock = [^{ 
    [myOperation doSomething]; // Do something with myOperation and other classes captured from original environment 

    [myOperation setCompletionBlock:nil]; // Manually setting to nil avoid retain cycles; 
} copy]; <- is this "copy" needed here? 

所以我對這段代碼的問題是標題問題:

我需要複製(Block_copy())我傳遞給setCompletionBlock的塊:或NSOperation會爲我做?

+1

沒有。由於原子操作的原因,NSOperation需要阻止將它從您的位置複製。 – CodaFi 2013-04-24 18:27:12

回答

4

-[NSOperation setCompletionBlock:] reference

塊在操作完成時被執行。此方法創建指定塊的副本。該塊本身不應該使用參數並且沒有返回值。

所以不,你不需要複製塊,因爲NSOperation已經爲你做了這個。

+0

對不起,在這個愚蠢的,不知何故,我忽略了這些詞的頭條。感謝您的快速反應。 – 2013-04-24 18:28:14

2

任何明確使用塊類型參數的API必須已經負責是否複製它。

只有當您將塊傳遞給採用通用對象指針類型參數的API時,您是否需要考慮是否需要複製它。

相關問題