iOS记一次深拷贝与浅拷贝

NSString这个类 , 字符串copy是非常特殊的,在各种应用场景下的拷贝是不同的!@property (nonatomic,copy)NSString *string;  这样写,在普通的情况下深拷贝mutableCopy 是深复制了一份内容,但是在- (id)mutableCopyWithZone:(nullable NSZone *)zone和

- (id)copyWithZone:(NSZone *)zone中,重新生成一份对象时,深拷贝mutableCopy字符串并没有重新生成一份指针与内容!如果这样写@property (nonatomic,strong)NSString *string;就可以!但是这样写,在外部copy时,并没有生成一份新的指针与内容  

附上测试代码:


图一和图二一起看1



图一和图二一起看2

解决办法:

1:改为strong指针,则会完全生成一份新的实例变量

2:copy关键字不变,将[self.string mutableCopy]改为[[NSString alloc]initWithString:self.string]

3:注意:@property(nonatomic,copy)NSMutableString*string;  此时的字符串为不可变字符串,@property(nonatomic,strong)NSMutableString*string;此时会完全生成一份新的实例变量,但是考虑到此时存在的重新赋值等问题,不建议采用NSMutableString作为属性,使用时建议一律NSString 关键字使用copy,此时需要采用第二条方法!

4:为何会出现如此状况,可以在下面评论区讨论,源码应该可以看出一点门道!

5:以上结果有问题以及异议,还请评论一下!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容