当不使用ARC编译,建议使用copy
属性的数据类型,如NSString
。 我找不到对使用适当的文件copy
在ARC模式。 有人能告诉我ARC什么是适用的?
Answer 1:
我们仍然建议复制,因为你希望避免的事情通过一个可变的字符串,然后改变它在你自己知道。 副本可以保证你有串不会改变。
Answer 2:
复制和ARC是正交的:你做可变对象“冻结”其状态的副本; ARC跟踪对象的引用计数的。
NSString
对象可能会或可能不会是可变的。 当您收到NSString*
作为参数,你不能肯定,这是不可改变的,除非你检查它的类型(即使这样你可能会得到误报)。 如果你的算法依赖于被设置后的字符串不改变,制作一份拷贝是做正确的事。 ARC,在另一方面,将确保在你持有的强引用它的对象不会被释放。
Answer 3:
copy
算作strong
。 使用:
@属性(非原子,副本)的NSString *名称;
https://devforums.apple.com/message/654033#654033
甚至:
@属性的NSString *的firstName;
http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW7
Answer 4:
如果你使用ARC 或非ARC没关系。
在背后的理由copy
是如此,你能保证你的类的内部状态,不能从外面执行修改。
如果有人通过你的这种情况可能发生NSMutableString
,再后来修改它。 这考虑是独立于存储管理环境。
文章来源: Should an NSString property under ARC be strong or copy?