NSString使用copy与strong区别

为什么NSString使用copy而不是strong, 很多人都有说深复制浅复制,影子克隆人等说法,这里我讲一下我的理解,直接上代码

属性:

@property(nonatomic,strong)NSString *StrongStr;

@property(nonatomic,copy)NSString *CopyStr;


实现:

NSMutableString *str=[NSMutableString stringWithString:@"1234"];

self.StrongStr=@"Sunshine";

self.CopyStr=@"Sunshine";

self.StrongStr=str;

self.CopyStr=str;

NSRange range=NSMakeRange(0,1);

[str replaceCharactersInRange:range withString:@"2"]


区别:


结论:可以看到在一个copy修饰和一个strong修饰的string,在复制给了一个他们的子类(mutableString)之后, 当可变字符串str改变之后, 使用strong修饰的随之改变, 而copy修饰的并未发生改变.

也就是说, 使用strong,只是把指针指向了可变字符串str, 并且计数器+1 , 所以当可变字符串改变时,本身也随着改变. 而使用copy 则可以复制一个值存起来, 可以防止对象在自己不知道的情况下被改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容