COPY

2022-07-30 14:29:17   第一文档网     [ 字体: ] [ 阅读: ] [ 文档下载 ]
说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。下载word有问题请添加QQ:admin处理,感谢您的支持与谅解。点击这里给我发消息

#第一文档网# 导语】以下是®第一文档网的小编为您整理的《COPY》,欢迎阅读!
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:深拷贝(可变)

容器内对象:始终是浅拷贝

自定义类实现拷贝、深拷贝

多处使用同一数组,要深拷贝

面试:深拷贝和浅拷贝的区别、自定义类的对象拷贝如何实现、数组的完全拷贝如何实现

本文来源:https://www.dywdw.cn/631195faeefdc8d377ee3201.html

推荐阅读