OC中的拷贝(copy)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC中的拷贝(copy)相关的知识,希望对你有一定的参考价值。
参考技术A 浅拷贝:
1.指针拷贝,没有开辟新的内存;
2.生成一个新的指针变量指向原有对象的地址;
3.原有对象引用计数+1。
深拷贝:
1.从堆中开辟一份新的内存给新的对象,并将原有对象的信息赋值给新的对象;
2.生成一个新的指针变量指向新的对象;
3.原有对象引用计数不会增加,新的对象引用计数为1。
完全拷贝:
1.是对多层对象包含或者集合中存储对象而言的;
2.被拷贝对象的每一层都进行了深拷贝;
3.例如集合中的对象,对象中的对象等。
示例:
打印输出:
结论:
示例:
打印输出:
结论:
示例:
打印输出:
结论:
示例:
打印输出:
结论:
在OC中不是所有的类都支持拷贝,只有遵循 NSCopying 才支持copy,只有遵循 NSMutableCopying 才支持mutableCopy。
NSObject有一个实列方法叫做 - (id)copy 。在OC源码中可以看到,默认的copy方法调用为:
对于采纳了 NSCopying 协议的子类,需要实现 copyWithZone 方法,否则会引发异常。 NSMutableCopying 只有在MRC模式下使用。
示例:
结论:
自定义类通过重写 copyWithZone 方法实现了深拷贝,通过 copy 方法(该方法默认调用 copyWithZone 方法)复制得到p1,从结果可以看出:深复制对象和和源对象的地址是不一样的。
NSCoping官方文档
自定义对象的copy和mutableCopy
以上是关于OC中的拷贝(copy)的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C中mutableCopy和copy的理解