如果不使用ARC进行编译,建议对copy
等数据类型使用NSString
属性。我找不到有关在ARC模式下使用copy
的正确文档。有人可以告诉我什么适用于ARC?
答案 0 :(得分:77)
仍然建议复制,因为你想避免传递一个可变字符串然后在你不知道的情况下更改它。副本保证您拥有的字符串不会更改。
答案 1 :(得分:14)
复制和ARC是正交的:你制作可变对象的副本以“冻结”它们的状态; ARC跟踪对象的引用计数。
NSString
个对象可能是也可能不是可变的。当您收到NSString*
作为参数时,除非您检查其类型(否则您可能会得到误报),您无法确定它是不可变的。如果您的算法依赖于设置后不更改的字符串,则制作副本是正确的做法。另一方面,ARC将确保在您持有对象的强引用时不释放该对象。
答案 2 :(得分:11)
copy
计为strong
。使用:
@property(非原子,复制)NSString * name;
https://devforums.apple.com/message/654033#654033
甚至:
@property NSString * firstName;
答案 3 :(得分:10)
如果您使用 ARC 或非ARC ,则无关紧要。
copy
背后的原因是,您可以保证您的类的内部状态不能从实现之外进行修改。
如果有人通过NSMutableString
,然后稍后修改,可能会发生这种情况。这种考虑与内存管理环境无关。