浅拷贝
“浅拷贝仅仅是把对象的引用复制,或者说对象的指针“
不是所有对象都能使用copy ,使用了copy必须遵守协议(实现 copyWithZone: 方法)对于很多现有的类,如Nsstring, NSDictionary 已经实现了CopyWithZone:。如果我们需要一个新的类,就需要手动来重写CopyWithZone的方法。
1 .当copy一个不可变对象时


2 .当copy一个可变对象时


总结
(1)当我们copy的是一个不可变的对象时,他的作用相当于retain
(2)当我们copy 的是一个可变对象时,副本对象是不可变的,同样实现了真正意义上的拷贝(copy一个Mutable类型可以深复制,但是其返回的 还是一个不可变的类型.)。
(3)copy方法,得到的是不可变对象,不管以前的是可变还是不可变。
深拷贝
”内容拷贝,源对象和副本指向的是不同的两个对象”,mutableCopy需要继承NSMutableCopying 协议才可以使用mutableCopy(实现 mutableCopyWithZone: 方法)
1 .当mutableCopy一个可变对象时


2 .当mutableCopy一个不可变对象时


总结
(1)源对象引用计数器不变,副本计数器设置为1
(2)当我们使用mutabelCopy 时 ,无论源对象是否可变,复制对象是否可变,都能实现了真正意义上得拷贝
(3)mutableCopy方法,得到的是可变对象,不管以前的是可变还是不可变。
网友评论