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

rus*_*ord 59 cocoa-touch objective-c automatic-ref-counting declared-property

不使用ARC进行编译时,建议使用copy数据类型的属性,例如NSString.我找不到有关copyARC模式使用的适当文档.有人可以告诉我什么适用于ARC?

Joe*_*Joe 78

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

  • 请注意,当我说"保证"时,我指的是符合Objective-C最佳实践的代码.我无法解释一个流氓程序员,他认为将`copy`方法添加到`NSString`类别是明智的. (9认同)

das*_*ght 14

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

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


Mat*_*ing 11

如果你使用不要紧,ARC非ARC.

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

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