iOS成长日记-copy的作用

今天的笔记是在属性声明中使用copy的原因。接触iOS开发的同学们都知道在声明NSString类型的属性时需要用copy修饰,但是不一定知道原因。

首先,要了解“深拷贝”和“浅拷贝”两个概念,我们都知道在创建一个对象时,实际上是在内存中开辟出了一块内存来存储对象同时创建一个指针指向该对象作为持有者。

“浅拷贝”:拷贝,顾名思义就是将某个东西复制一份(废话)。而拷贝的深度不一样,“浅拷贝”只是拷贝了指向对象的指针,拷贝后的结果是两个不同的指针指向同一个对象,那么对象中的值发生改变,无论通过哪一个指针取出对象,对象中的值都是不变的。拷贝的不彻底嘛!

“深拷贝”:与“浅拷贝”不同,它会将对象和指针都拷贝出来,拷贝后的结果就是两个不同的个体了。就像是双胞胎,长得一样,性格却不同,明显不是一个人,当然媳妇肯定也不一样,其中一个不在人世了,另一个仍然可以活的逍遥自在。其中任何一个对象的改变都不会改变另外一个。

下面NSString来直观地看一下两者的区别,上代码:

“浅拷贝”:

@property (nonatomic, strong) NSString *string;

NSMutableString*tempString = [NSMutableString  WithString:@"哈哈"];

self.string= strtempString;

[tempString setString:@"哼哼"];

此时string的值是“哼哼”。


“深拷贝”:

@property(nonatomic,copy)NSString *string;

同样执行上面的代码,string的值就是“哈哈”。

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

相关阅读更多精彩内容

友情链接更多精彩内容