【#文档大全网# 导语】以下是®文档大全网的小编为您整理的《COPY》,欢迎阅读!
*** 拷贝 ***************************************************************************
Ios提供了copy和mutablecopy方法,顾名思义,copy就是复制了一个imutable的对象,而mutablecopy就是复制了一个mutable的对象。
1.系统的非容器类对象 : NSString,NSNumber
不可变对象复制,copy是浅拷贝,mutableCopy就是深拷贝。
对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。
2.系统的容器类对象 : NSArray,NSDictionary
不可变对象复制,copy是浅拷贝,mutableCopy就是深拷贝。
对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。
容器内对象的变化:
对于容器而言,其元素对象始终是指针复制。如果需要元素对象也是对象复制,需要元素实现copying等协议,来实现深拷贝。
3.自定义类
实现NSCopying,NSMutableCopying这样就能调用copy和mutablecopy了
copy != 浅拷贝
mutablecopy != 深拷贝
4.拷贝对引用计数的影响
浅拷贝,影响引用计数,深拷贝不影响
可变容器,可变对象等的copy,不会影响引用计数
5.使用
开发中使用容器或集合类:通常深拷贝,一般多个地方用到,其修改操作都是独立的
NSString一般用copy描述,原理同上,加入外部用mutableString赋值,会造成多个地方用,修改都同步了,(一般都是独立的,如)
通过归档,序列化来实现完全拷贝,如UIView,容器类
总结:
系统非容器类:
imutable类: copy=>浅拷贝(不可变) mutableCopy:深拷贝(可变)
mutable类: copy=>深拷贝(不可变) mutableCopy:深拷贝(可变)
容器类:
imutable类: copy=>浅拷贝(不可变) mutableCopy:深拷贝(可变)
mutable类: copy=>深拷贝(不可变) mutableCopy:深拷贝(可变)
容器内对象:始终是浅拷贝
自定义类实现拷贝、深拷贝
多处使用同一数组,要深拷贝
面试:深拷贝和浅拷贝的区别、自定义类的对象拷贝如何实现、数组的完全拷贝如何实现