不使用 ARC 编译时,建议使用copy
数据类型的属性,例如NSString
. 我找不到关于copy
在 ARC 模式下使用的正确文档。有人能告诉我什么适用于 ARC 吗?
问问题
23775 次
4 回答
81
仍然建议复制,因为您想避免传递可变字符串然后在您不知情的情况下更改它。副本保证您拥有的字符串不会更改。
于 2012-06-28T17:16:14.210 回答
14
复制和 ARC 是正交的:复制可变对象以“冻结”它们的状态;ARC 跟踪对象的引用计数。
NSString
对象可能是可变的,也可能不是可变的。当您收到一个NSString*
作为参数时,除非您检查它的类型,否则您无法确定它是不可变的(即使这样您也可能会得到误报)。如果您的算法依赖于设置后不更改的字符串,那么制作副本是正确的做法。另一方面,ARC 将确保在您持有对它的强引用时不会释放该对象。
于 2012-06-28T17:16:43.443 回答
12
无论您使用的是ARC还是非 ARC都没有关系。
背后的原因copy
是您可以保证您的类的内部状态不能从实现外部修改。
如果有人将 传递给您NSMutableString
,然后稍后对其进行修改,则可能会发生这种情况。这种考虑与内存管理环境无关。
于 2012-06-28T17:16:19.327 回答
11
copy
算作strong
。利用:
@property(nonatomic,copy) NSString *name;
https://devforums.apple.com/message/654033#654033
甚至:
@property NSString *firstName;
于 2013-04-10T17:18:07.513 回答