ShallowCopy与DeepCopy
来源:互联网 发布:tc软件 编辑:程序博客网 时间:2024/05/22 12:10
概念
浅层复制(copy):
只复制指向对象的指针,而不复制引用对象本身。
//通过对象的指针来访问这个对象—-只赋值地址
深层复制(mutableCopy):
复制引用对象本身—再创建一个对象 意思就是有个A对象,复制一份后得到A_copy对象后,对于浅复制来 说,A和A_copy指向的是同一个内存资源,复制的 只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A_copy执行了修改操作,那么发现A引用的对象同样被修改,这其实违背了我们复制拷贝的一 个思想。深复制就好理解了,内存中存在了两份独立对象本身。
//当修改A时,A copy不变。
总结:简单点理解就是,浅拷贝就是你和你的影子,你没了你的影子也没了。
深拷贝就是你和你的克隆人,你没了你的克隆人还在。
Demo
对不可变的NSString:
NSString *str1=@”test”;
NSString *str2=[str1 copy];
NSLog(@”str1===%@ str2===%@”,str1,str2);
NSLog(@”str1===%p str2===%p”,str1,str2);
结果:
2015-09-19 20:52:42.617 deepCopy_shallowCopy[5807:570805] str1===test str2===test
2015-09-19 20:52:42.617 deepCopy_shallowCopy[5807:570805] str1===0x1022110f8 str2===0x1022110f8NSString *str1=@”test”;
NSString *str2=[str1 mutableCopy];
NSLog(@”str1===%@ str2===%@”,str1,str2);
NSLog(@”str1===%p str2===%p”,str1,str2);
结果
2015-09-19 20:53:23.633 deepCopy_shallowCopy[5826:571504] str1===test str2===test
2015-09-19 20:53:23.634 deepCopy_shallowCopy[5826:571504] str1===0x103c0a0f8 str2===0x7fe443f2d6d0对可变的NSMutableString:
NSString *str1=@”test”;
NSMutableString *str3=[str1 mutableCopy];
NSMutableString *str4=[str3 mutableCopy];
[str4 appendString:@”xzx”];
NSLog(@”str3===%@ str4===%@ “,str3,str4);
NSLog(@”str3===%p str4===%p “,str3,str4);
结果:
2015-09-19 21:04:20.447 deepCopy_shallowCopy[5978:577545] str3===test str4===testxzx
2015-09-19 21:04:20.448 deepCopy_shallowCopy[5978:577545] str3===0x7fd478e14cb0 str4===0x7fd478e28710NSString *str1=@”test”;
NSMutableString *str3=[str1 mutableCopy];
NSMutableString *str4=[str3 copy];
[str4 appendString:@”xzx”];
NSLog(@”str3===%@ str4===%@ “,str3,str4);
NSLog(@”str3===%p str4===%p “,str3,str4);
结果:crash
3.小结
如果对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。如果是对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的
- ShallowCopy与DeepCopy
- [Python]理解Python深拷贝DeepCopy与浅拷贝ShallowCopy
- C++中ShallowCopy和DeepCopy的区别
- 漫谈deepcopy(深拷贝)和shallowcopy(浅拷贝)
- python copy与deepcopy
- deepcopy
- deepCopy
- DeepCopy
- Python-copy()与deepcopy()区别
- 列表中的Copy与DeepCopy
- Python copy()与deepcopy()区别
- Python-copy()与deepcopy()区别
- python中的copy与deepcopy
- python中copy与deepcopy的使用
- Python 中copy与deepcopy的比较
- Python copy与deepcopy的区别
- 【Python】copy()与deepcopy()的区别
- 深拷贝deepcopy与浅拷贝copy
- test5.9
- (转)SQL 优化原则
- Good Luck in CET-4 Everybody! 1847 (简单博弈)
- sp<> wp<>
- Photoshop——切图小技巧
- ShallowCopy与DeepCopy
- Android Studio 百度地图开发
- SQL语句
- MySQL基本使用
- 剑指offer - 二维数组的查找
- 定时旋转图片
- UI控件——UISlider:滑动条
- c#+AE开发一些常用到的方法
- 相机App简介