本文主要是介绍iOS 内存管理~浅拷贝(Shallow Copy),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄
一、浅拷贝概念
1.浅拷贝:只是拷贝了对象的指针,而不是拷贝对象本身。
2.在Objective-C中,通过两个方法 copy和mutableCopy可以执行拷贝操作,其中copy是获得一个不可变对象,而mutableCopy是获得一个可变对象。
3.并且两个方法分别调用copyWithZone和mutableCopyWithZone两个方法来进行拷贝操作,一个类必须实现copyWithZone或者mutableCopyWithZone,才能进行copy或者mutableCopy
如图:
二、浅拷贝代码实现
浅拷贝有很多中方法,当你进行浅拷贝时,会向原始的集合发送retain消息,这时引用计数就会 +1 ,同时指针就被拷贝到新的集合中去。
NSArray *shallowCopyArray = [someArray copyWithZone:nil];
NSDictionary *shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:NO];
注意:如果集合里的对象都遵循NSCopying
协议,那么对象就会被深拷贝到新的集合。如果对象没有遵循 NSCopying
协议,而尝试用这种方法进行深拷贝,会在运行时出错。
三、浅拷贝、深拷贝、完全拷贝区别:
* 浅拷贝(shallow copy): 在浅拷贝操作时,对于被拷贝对象的每一层都是指针拷贝。
* 深拷贝(one-level-deep copy):在深拷贝操作时,对于被拷贝对象,至少有一层是深拷贝。
* 完全拷贝(real-deep copy): 在完全拷贝操作时,对于被拷贝对象的每一层都是对象拷贝
四、系统对象的拷贝
不管是集合类对象,还是非集合类对象,当接收到copy和mutableCopy消息时,都遵循以下准则:
- copy返回不可变对象(immutable);所以,如果对copy返回值使用mutable对象接口就会crash;
- mutableCopy返回可变对象(mutable);
这篇关于iOS 内存管理~浅拷贝(Shallow Copy)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!