转载

Copy Or Not?

昨天突然被提及到了一个问题: Block 的作为属性,应该是 copy 还是 strong ?(当然,原问题不是这个,出于某些原因吧。)

很多人第一反应都是 copy 但是,我似乎在苹果的Tips上看到过,似乎 strong 也可以,所以只描述了一下堆栈拷贝流程,没敢确切的回答,回来翻了一下文档,果然,在 ARC 下都是可以的。

ARC 下,之所以 Block 还使用 copy 是从 MRC 遗留下来的,在 MRC 中,方法内部的 Block 实在栈区的,使用 copy 可以把它放到堆区。其实在 ARC 下写不写都OK。因为编译器自动对 Block 进行了 copy 操作。(Swift 中变成了 逃逸性闭包与非逃逸性闭包,可以参考我以前的文章。) 我猜也许好多人还坚持要在 ARC 下写 copy 可能是在时刻提醒自己吧。这样就会不犯二去手动拷贝属性值。

property 中 的 NSString, NSArray, NSDictionary 使用 copy 比较常见,因为他们有对应的 mutable ,为了确保这些不可变对象不会乱改变,所以应该在设置新属性的时候 copy 一份。

原文  http://iJack.pw/2016/03/10/copy-or-not/
正文到此结束
Loading...