我的问题是关于Objective-C中的块:假设以下情况(启用ARC):
typedef NSString*(^MyBlockType)();
typedef NSString*(^MyReturnBlockType)(MyBlockType);
- (MyReturnBlockType) foo: (MyBlockType) block
{
return ^NSString*(MyBlockType someBlock) {
return someBlock();
};
}
方法block
接收的参数foo:
在方法返回的块中使用。但是,谁强烈提及block
? foo:
应该在返回MyReturnBlockType
- 块之前复制块吗?任何见解都将不胜感激。
答案 0 :(得分:1)
参数block
未在代码中的任何位置使用。
假设您打算在block
内使用someBlock
。复制块时,将保留块捕获的对象指针类型的变量。此外,复制块时,块复制的块指针类型的变量将被复制。因此,在复制someBlock
时,将复制block
。
在ARC中,在返回之前会自动复制直接返回的堆栈块。因此,someBlock
和block
将被复制。
不,foo:
不需要显式复制block
,因为它没有做任何事情来显式存储它(在实例变量或其他东西中)。