浅谈对property几个关键字的理解

看了许多教程,对assign, copy, strong的总结差不多如下:

对于直接赋值的变量,如int,double,CGRect,使用assign;

对于NSString,使用copy;

对于对象类,使用strong(有时候是weak);

(关于weak与strong:weak变量只是指向内存地址,并没有持有)


但我个人使用NSString的时候写的修饰词一般是strong,也是可以正常运行的。

所以查了一下copy和strong的区别,主要是set方法有所不同


copy:release旧值,copy一个新对象,新对象的reference count为1

strong:将对象的引用计数+1并分配内存地址


@property (copy, nonatomic) NSString *copyStr;

@property (strong, nonatomic) NSString *strongStr;

如果二者被同样赋值

NSMutableString *str = @"123";

copyStr = str;

strongStr = str;

那么copyStr指向的内存地址与str是不同的,strongStr指向的内存地址与str相同

原因是copyStr是一个新对象,是深复制。

当[str appendingString:@"abc"]时,strongStr变化,copyStr并不会变化

我们一般并不希望NSString变量会随着赋值对象变化,所以使用copy深复制;

但我一般使用时是NSString为其赋值,所以copy和strong的效果是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Quasimodor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值