深拷贝:复制对象并且复制对象里面的内容完全拷贝
浅拷贝:指针拷贝只拷贝对象本身不拷贝里面内容
看是不是深拷贝主要看是不是拷贝了对象里面的内容
copy、mutableCopy系统自带的这两个拷贝都属于浅拷贝
实现深拷贝的方式:
1、可以自定义拷贝(要看具体拷贝的内容)
并不是所有对象都可以拷贝只有遵守了拷贝协议的对象才可以
拷贝比如:SString
NSArray NSDictionary
(1)导入协议
(2)实现协议方法、自定义拷贝
①、copyWithZone:
②、mutableCopyWithZone:
2、系统提供给了深拷贝的方法copyItems如果是YES就是深拷贝
(1)数组的:-
(instancetype)initWithArray:(NSArray *)array
copyItems:(BOOL)flag
(2)字典的:-
(instancetype)initWithDictionary:(NSDictionary
ObjectType> *)otherDictionary copyItems:(BOOL)flag
不可变对象copy ->不可变对象
可变对象copy ->不可变对象
不可变对象mutableCopy ->可变对象必须用对应的类型去接收
可变对象mutableCopy ->可变对象必须用对应的类型去接收
mutableCopy?深浅拷贝
如果:
指针拷贝->浅拷贝
对象拷贝->深拷贝
那么:mutableCopy
->深拷贝
在使用mutableCopy拷贝后两个对象的内存地址是不一样的