我是否需要Block_copy我传递给NSOperation的setCompletionBlock的块:?

时间:2013-04-24 18:23:02

标签: objective-c objective-c-blocks nsoperation

我有一个NSOperation的子类,我想做这样的事情:

@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会为我做这件事吗?

2 个答案:

答案 0 :(得分:4)

来自-[NSOperation setCompletionBlock:] reference

  

操作完成时要执行的块。此方法创建指定块的副本。块本身不应该没有参数,也没有返回值。

所以不,你不需要复制块,因为NSOperation已经为你做了这个。

答案 1 :(得分:2)

显式获取块类型参数的任何API必须已经考虑是否复制它。

只有当您将块传递给采用通用对象指针类型参数的API时,您是否需要担心是否要复制它。