Should an NSString property under ARC be strong or copy?

此生再无相见时 提交于 2019-11-27 00:09:42

问题


When not compiling with ARC, it is recommended to use copy properties for data types such as NSString. I could not find proper documentation on the use of copy in ARC mode. Can someone tell me what's applicable for ARC?


回答1:


It is still recommended to copy because you want to avoid something passing a mutable string and then changing it without you knowing. A copy guarantees that the string you have will not change.




回答2:


Copying and ARC are orthogonal: you make copies of mutable objects to "freeze" their state; ARC keeps track of object's reference count.

NSString objects may or may not be mutable. When you receive an NSString* as a parameter, you cannot be certain that it is immutable unless you check its type (and even then you may get false positives). If your algorithm relies on the string not changing after being set, making a copy is the right thing to do. ARC, on the other hand, will ensure that the object is not released while you are holding a strong reference to it.




回答3:


copy counts as strong. Use:

@property(nonatomic,copy) NSString *name;

https://devforums.apple.com/message/654033#654033

or even:

@property NSString *firstName;

http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW7




回答4:


It doesn't matter if you're using ARC or non-ARC.

The reasoning behind the copy is so that you can guarantee that your class' internal state can't be modified from outside the implementation.

This could happen if someone passes you an NSMutableString, and then modifies it later. That consideration is independent of the memory management environment.



来源:https://stackoverflow.com/questions/11249656/should-an-nsstring-property-under-arc-be-strong-or-copy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!