深拷贝与浅拷贝的解析 (学习日记)
来源:互联网 发布:知其雄守其雌曾国藩 编辑:程序博客网 时间:2024/06/07 10:23
(一)深拷贝,浅拷贝定义
浅拷贝是当对象的属性是指针变量时,如果程序只是复制该指针的地址,而不是真正复制指针所指向的对象,这种方式就被称为浅拷⻉。
深拷贝不仅会复制对象本⾝,而且会“递归”复制每个指针类型的属性,直到两个对象没有任何的共用部分为⽌。
(二)对象复制方法
NSObject类提供了copy和mutableCopy方法,通过这两个方法即可复制已有对象的副本:
当程序调⽤用对象的copy⽅方法来复制对象时,程序底层需要调⽤用copyWithZone⽅方法来完成实际的复制⼯工作,copy返回的实际上就是copyWithZone⽅方法的返回值,为了保证⼀一个对象可调⽤用copy⽅方法来复制⾃自⾝身的不可变副本,通常需要做如下事情
• 让类实现NSCopying协议
• 让类实现copyWithZone⽅方法
•让类实现NSMutableCopying协议
•让类实现mutableCopyWithZone⽅方法
在iOS SDK中常⽤用的可复制对象有:NSNumber、NSString、NSArray、NSDictionary、NSMutableDictionary、NSMutableArray、NSMutableString 。
(三)拷贝实现(非容器类)(main 在非ARC下打印地址)
结果:
由此可知,复制非容器类对象时,copy是指针复制,即浅拷贝。而mutableCopy是对象拷贝,即深拷贝。
(四)拷贝实现(容器类)(main 在非ARC下打印地址)
(1)copy
实现协议时,对象用copy:
实现协议时,对象用mutableCopy:
对于容器类对象,copy将容器对象复制了,但容器里的对象与非容器一样,copy在这里只是指针复制,mutableCopy是对象复制。
(2)mutableCopy
实现协议时,对象用copy:
实现协议时,对象用赋值法:
实现协议时,对象用mutableCopy:
结论:
对于容器类对象,mutableCopy也将容器对象复制了,但容器里的对象与非容器一样,copy在这里只是指针复制,mutableCopy是对象复制。还有,赋值法默认是copy,即浅拷贝。
- 深拷贝与浅拷贝的解析 (学习日记)
- 深拷贝与浅拷贝解析
- iOS深拷贝与浅拷贝解析
- C++浅拷贝与深拷贝的问题解析
- c++中类的位拷贝与拷贝构造函数(浅拷贝与深拷贝)
- c++中 拷贝构造函数的深拷贝和浅拷贝--“浅拷贝”与“深拷贝”
- 深拷贝与浅拷贝的实现
- 深拷贝与浅拷贝的区别
- c++的深拷贝与浅拷贝
- 深拷贝与浅拷贝的区别
- C++的深拷贝与浅拷贝
- 浅拷贝与深拷贝的区别
- C++的深拷贝与浅拷贝
- Python的浅拷贝与深拷贝
- 浅拷贝与深拷贝的区别
- C++的深拷贝与浅拷贝
- 深拷贝与浅拷贝的区别
- 深拷贝与浅拷贝的练习
- 邂逅时光,感恩岁月
- 天翼短信发送三方接口对接
- nginx rewrite if指令剖析
- Android性能优化之如何避免Overdraw
- 【经典算法】:欧几里得算法求最大公约数
- 深拷贝与浅拷贝的解析 (学习日记)
- 能ping通但是不能访问工作组
- d
- angularjs+requirejs按需加载
- 操作系统实验,IPC(2): reader and writer, 读者和写者问题
- DLL在Qt中的创建与使用
- git学习笔记-2
- Google Chrome扩展(Extensions)和插件(plugins)的区别
- Java算法---密码验证合格程序