A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

还是不太理解深/浅拷贝、copy和mutableCopy,求大神详细讲解下。

7 个回复

倒序浏览
说个容易理解的:
深,类似于复制文件;
浅,类似于复制快捷方式;
删了原文件,复制的文件依然可以打开,快捷方式可就没用了。

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

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

非常感谢,很详细讲解。还有谢谢你给的6个黑马币。
回复 使用道具 举报
cogddo 发表于 2015-5-15 11:16
copy&mutableCopy后的指针都是可变的吧,,,主要区别就是内容可变与不可变吧。

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

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

讲解很详细,非常感谢
回复 使用道具 举报
我的视频中没有这个内容,求楼主分享  邮箱:1909181776@qq.com
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马