我有一个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会为我做这件事吗?
答案 0 :(得分:4)
来自-[NSOperation setCompletionBlock:] reference:
操作完成时要执行的块。此方法创建指定块的副本。块本身不应该没有参数,也没有返回值。
所以不,你不需要复制块,因为NSOperation已经为你做了这个。
答案 1 :(得分:2)
显式获取块类型参数的任何API必须已经考虑是否复制它。
只有当您将块传递给采用通用对象指针类型参数的API时,您是否需要担心是否要复制它。