Objective c 是否需要阻止(u复制传递给NSOperation的块';s setCompletionBlock:?

Objective c 是否需要阻止(u复制传递给NSOperation的块';s setCompletionBlock:?,objective-c,objective-c-blocks,nsoperation,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 capture

我有一个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?
@接口MyOperation:NSOperation。。。
MyOperation*MyOperation=[[MyOperation alloc]init];
[myOperation setCompletionBlock=[^{
[myOperation doSomething];//对从原始环境捕获的myOperation和其他类执行一些操作
[myOperation setCompletionBlock:nil];//手动设置为nil避免保留循环;
}从以下位置复制];:

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


因此,不需要复制块,因为NSOperation已经为您执行了此操作。

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


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

否。NSOperation需要将它从您身边复制出去,因为原子操作是如何进行的。很抱歉在这一点上说得不好,不知何故,我忽略了这些词的标题行。谢谢您的快速回复反应。