黑马程序员技术交流社区

标题: 还是不太理解深/浅拷贝、copy和mutableCopy [打印本页]

作者: cogddo    时间: 2015-5-15 10:32
标题: 还是不太理解深/浅拷贝、copy和mutableCopy
还是不太理解深/浅拷贝、copy和mutableCopy,求大神详细讲解下。

作者: 仰望的繁华    时间: 2015-5-15 11:07
说个容易理解的:
深,类似于复制文件;
浅,类似于复制快捷方式;
删了原文件,复制的文件依然可以打开,快捷方式可就没用了。

copy&mutableCopy:
主要问题是,对象可变与否,以及指针可变与否的问题。
例如不可变:NSString *str = @"abc";
此时的@"abc"不可变,不能直接修改。
但是str这个指针仍是可变的,可以修改指针地址指向另一个字符串:*str = @"123";
作者: cogddo    时间: 2015-5-15 11:16
仰望的繁华 发表于 2015-5-15 11:07
说个容易理解的:
深,类似于复制文件;
浅,类似于复制快捷方式;

copy&mutableCopy后的指针都是可变的吧,,,主要区别就是内容可变与不可变吧。

非常感谢,很详细讲解。还有谢谢你给的6个黑马币。
作者: 仰望的繁华    时间: 2015-5-15 11:24
cogddo 发表于 2015-5-15 11:16
copy&mutableCopy后的指针都是可变的吧,,,主要区别就是内容可变与不可变吧。

非常感谢,很详细讲解。 ...

对,主要是内容是否可变。
作者: 一步一个脚印    时间: 2015-5-15 12:26
首先你得知道OC中copy语法的用途:对copy出来的副本的操作不影响原来的对象。然后再知道copy方法copy出来的对象是不可变的,mutableCopy方法copy出来的对象是可变的。好了,一个不可变对象使用copy,也就是说不可变的对象,复制出一个不可变的对象,因为不可变的对象本身是不可变的,如果从新开辟空间弄一个副本出来 ,是不是太浪费空间了,而且复制对象内容也耗费点性能,所以不可变使用copy方法的时候索性不生成副本,直接把原对象的指针赋给copy出来的对象,这就是指针拷贝。其他情况都是内容拷贝,你想啊,可变的对象使用copy复制出来的是不可变的对象,这种情况 原对象是可变的,副本对象要求是不可变的。如果指针拷贝的话,原对象因为可变,如果变了就会让copy出来的不可变对象也改变了,所以肯定要内容拷贝了,其他情况 你慢慢思考下
作者: hehelaicaicai    时间: 2015-5-15 12:58
这个是基础班的内容吗?我看的视频里怎么没有这部分内容呢。
作者: cogddo    时间: 2015-5-15 13:01
一步一个脚印 发表于 2015-5-15 12:26
首先你得知道OC中copy语法的用途:对copy出来的副本的操作不影响原来的对象。然后再知道copy方法copy出来的 ...

讲解很详细,非常感谢
作者: wodeheimalife    时间: 2015-5-15 13:08
我的视频中没有这个内容,求楼主分享  邮箱:1909181776@qq.com




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2