美文网首页
NSString是用copy还是用strong修饰?

NSString是用copy还是用strong修饰?

作者: 一米阳光_c345 | 来源:发表于2018-10-20 18:48 被阅读0次

在开发中,我们经常用到一些东西,却不知道为什么这样用。看见同事用strong修饰字符串,我一直用的是copy,虽然好奇,但是也没有抽出十分钟的时间去弄清楚到底该用什么,这样的习惯的确不好,有疑惑的地方就要立刻弄明白才对。

当给copy修饰的字符串属性赋一个不可变的字符串,该属性会进行浅拷贝,当赋一个可变的字符串,会进行深拷贝,当字符串改变的时候该属性不会随着字符串的值改变而改变。

当给strong修饰的字符串属性赋值一个可变的字符串的时候,由于指向的地址是一样的,属性会随着字符串的值改变而改变。

综上所述,为了避免一些错误,尽量使用copy修饰字符串。

上面的例子就不贴验证代码了。那不可变字符串拼接了字符串之后呢会发生什么情况。

@property (nonatomic,copy) NSString * coString;

@property(nonatomic,strong) NSString * strongString;

这是两个属性

NSString* string =@"456";

self.coString= string;

self.strongString= string;

string = [string stringByAppendingString:@"789"];

NSLog(@"string---%@    coString---%@    strongString---%@",string,self.coString,self.strongString);

NSLog(@"string---%p    coString---%p    strongString---%p",string,self.coString,self.strongString);

打印结果:

呵呵

是因为string 在执行string = [string stringByAppendingString:@"789"];这句代码之后又指向了新的地址,所以它的值改变,是不会对两个属性的值产生影响的,呵呵,是我太孤陋寡闻了。

相关文章

网友评论

      本文标题:NSString是用copy还是用strong修饰?

      本文链接:https://www.haomeiwen.com/subject/eqmmzftx.html