Objc中为何某些类的属性要设置为copy而不是strong?

Posted 大熊猫侯佩

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Objc中为何某些类的属性要设置为copy而不是strong?相关的知识,希望对你有一定的参考价值。

大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处.
如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;)


不知道大家是否注意,我们再使用一些第三方类的时候大多数情况下对象属性的type都是strong,但是某些类却设置成了copy类型,这是为什么?

看似很细小的改变其实是有其用意的.

copy和strong之间的区别很清楚,前者只是直接引用一个对象,而后者却是引用一个对象的拷贝.

比如如下示例:

#import <UIKit/UIKit.h>

@interface HyNameAndColorCell : UITableViewCell

@property (copy,nonatomic) NSString *name;
@property (copy,nonatomic) NSString *color;

@end

我们看到name和color字符串对象属性使用的type都是copy.

这是因为,我们再将上述2各字符串对象传递给其实例变量后,很可能会改变其内容,别忘了NSMutableString也可以传递给NSString对象(但是反过来却不可以,不明白的自行度娘类和子类对象的赋值).

如果属性的type设置为copy,那么不管原有对象如何更改都不会影响HyNameAndColorCell实例变量的值了.That’s Why!

以上是关于Objc中为何某些类的属性要设置为copy而不是strong?的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特:@objc(...) 属性

Deepcopy特定属性

核心数据 - 某些属性崩溃:objc_release

是否允许使用 ARC 在 ObjC 中调用 [obj copy]?

objc:具有 NSString 的强属性

ObjC:我可以使用 property = nil 而不是 self.property = nil 来释放它吗?