2

我有一个 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 会为我做这件事?

4

2 回答 2

4

-[NSOperation setCompletionBlock:] 参考

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

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

于 2013-04-24T18:25:42.660 回答
2

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

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

于 2013-04-24T23:34:17.583 回答