ARC下的NSString属性是强还是复制?

时间:2012-06-28 17:11:33

标签: objective-c cocoa-touch automatic-ref-counting declared-property

如果不使用ARC进行编译,建议对copy等数据类型使用NSString属性。我找不到有关在ARC模式下使用copy的正确文档。有人可以告诉我什么适用于ARC?

4 个答案:

答案 0 :(得分:77)

仍然建议复制,因为你想避免传递一个可变字符串然后在你不知道的情况下更改它。副本保证您拥有的字符串不会更改。

答案 1 :(得分:14)

复制和ARC是正交的:你制作可变对象的副本以“冻结”它们的状态; ARC跟踪对象的引用计数。

NSString个对象可能是也可能不是可变的。当您收到NSString*作为参数时,除非您检查其类型(否则您可能会得到误报),您无法确定它是不可变的。如果您的算法依赖于设置后不更改的字符串,则制作副本是正确的做法。另一方面,ARC将确保在您持有对象的强引用时不释放该对象。

答案 2 :(得分:11)

答案 3 :(得分:10)

如果您使用 ARC 非ARC ,则无关紧要。

copy背后的原因是,您可以保证您的类的内部状态不能从实现之外进行修改。

如果有人通过NSMutableString,然后稍后修改,可能会发生这种情况。这种考虑与内存管理环境无关。