*** 拷贝 ***************************************************************************
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:深拷贝(可变)
容器内对象:始终是浅拷贝
自定义类实现拷贝、深拷贝
多处使用同一数组,要深拷贝
面试:深拷贝和浅拷贝的区别、自定义类的对象拷贝如何实现、数组的完全拷贝如何实现
本文来源:https://www.wddqw.com/doc/631195faeefdc8d377ee3201.html
正在阅读:
COPY01-01
现代汉语 思考和练习01-01
青春中国(爱国诗歌)01-01
行书岳飞满江红书法01-01
为未来努力奋斗的qq个性签名01-01
动物儿歌仿写句子小兔怎么写01-01
作文-心安理得01-01