什么是关键字copy
在ARC什么是“复制”在ARC
我找到copy
(关键字)的角色的角色可以在ARC被使用,而retain
和release
不能使用。另外在ARC中copy
的作用与copy
在MRC中的作用是一样的吗?如果是,在ARC中copy
是否使retainCount
+1?
我曾看到迈克灰博客约雅倩说:
你需要明确地复制你传递的ID参数块:
[myArray addObject: [^{ DoSomethingMagical(); } copy]];
,但是当我测试这样的代码(不使用copy
),它的效果也很好。
NSArray *array = [[NSArray alloc] initWithObjects:^{NSLog(@"hahaha");}, nil];
[self test:[array objectAtIndex:0]];
- (void)test:(void (^)(void))completion
{
completion();
}
这是否意味着没有必要copy
块,当它作为id
类型?
通过在MRC或ARC中使用副本不会增加保留计数。 – Rakesh 2013-04-22 14:35:06
@rakesh更准确地说“ARC/MRR中的保留数*可能会增加”,因为它是一个实现细节。对于NSMutableString?你会得到一份副本。对于NSString?将保留计数加1并返回相同的对象。 – bbum 2013-04-22 15:31:22
请注意,在您的示例中的块可能是一个静态块,因此,您的代码可能只是巧合“工作”。 – bbum 2013-04-22 15:32:18