2013-04-24 24 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时,您是否需要考虑是否需要复制它。

相关问题