阅读本文之前首先了解copy与retain的区别,如果有不正确的地方望大家多多指教:
copy是创建一个新对象,retain是创建一个指针,引用对象计数加1。Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化。copy减少对象对上下文的依赖。
retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝。
当然在ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableCopy消息。假如发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常。但是默认的ios类并没有遵守这两个协议。如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone: 方法,如果想自定义一下mutableCopy 那么就必须遵守NSMutableCopying,并且实现 mutableCopyWithZone: 方法。
废话不多说,看代码:(注意咯:在MRC的环境下编译的哟~)
第一步我们首先创建一个Person的类,Person.h
第一种情况:
我们来看看输出结果:
第二种情况:
第三种情况:
第四种情况:
第五种情况:
第六种情况:
阅读完以上的几种情况,我相信大家对copy的理解加深了一层,最后我总结出:
copy
1.不可变copy拷贝不可变对象(浅拷贝)
2.不可变copy拷贝可变对象 (深拷贝)
不可变copy拷贝拷贝出来的对象是不可变的
3.可变copy拷贝不可变对象(深拷贝)
4.可变copy拷贝可变对象 (深拷贝)
可变copy拷贝拷贝出来的对象是可变的
PS:本文章是我的个人学习心得,如有错误请告之~~