copy和mutableCopy的深、浅拷贝】的更多相关文章

所有系统容器类的copy或mutableCopy方法,都是浅拷贝!!! (ps:什么是容器?比如NSArray,NSMutableArray,NSDictionary,NSMutableDictionary) 很多人一直认为,copy 是浅拷贝,mutableCopy 是深拷贝.我以前也是这么认为的.甚至很多网上的教学视频,很多书籍,很多博客,都是这么说的.但是,这大错特错! 为了防止有人不信,我们先拿出决定性的证据,然后再说其他的. There are two kinds of object…
对象拷贝主要由两种方式:copy和mutableCopy.浅拷贝是指直接将指针指向原有的地址,从而达到复制的目的.深拷贝是指重新生成一个对象,将原有对象的内容复制到新的对象中.copy 返回的是一个不可变的对象,mutableCpoy返回的是一个可变的对象,但是由于OC的弱语法特性,即使如下使用编译器也不会报错.但是再运行时,arrayCopy会找不到具体的方法,报错. NSMutableArray *arrayCopy=[muArray copy]; copy当所引用的对象是可变的时,则是深拷…
深.浅拷贝 copy mutableCopy NSString NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyString = %p&quo…
深.浅拷贝 copy mutableCopy NSString 1 2 3 4 5 6 NSString *string = @"汉斯哈哈哈"; // 没有产生新对象 NSString *copyString = [string copy]; // 产生新对象 NSMutableString *mutableCopyString = [string mutableCopy]; NSLog(@"string = %p copyString = %p mutableCopyStr…
阅读本文之前首先了解copy与retain的区别,如果有不正确的地方望大家多多指教: copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化.copy减少对象对上下文的依赖. retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝. 当然…
1.使用copy或mutableCopy方法可以创建一个对象的副本. copy: (1)需要实现NSCoppying协议 (2)创建的是不可变副本(如NSString.NSArray.NSDictionary) mutableCopy: (1)需要先实现NSMutableCopying协议 (2)创建的是可变副本(如NSMutableString.NSMutableArray.NSMutableDictionary) [备注]Copy的目的是建立副本,同时修改原始对象和复本不会互相干扰 2.深复…
NSString *string = @"origion"; NSString *stringCopy = [string copy]; NSMutableString *stringMCopy = [string mutableCopy]; [stringMCopy appendString:@"!!"]; 上面这段代码中,需要注意的点: 1. retainCount对常量是无效的,数字会是个很大的数字.它对堆上的内存对象是正确的,对于栈上的常量无效. 2. co…
Objective - C 中有很多在日常项目中经常用到的常用代码,在这里着重的讲一下关于copy 和 mutableCopy 的区别以及相关用法. Objective - C 中可变对象和不可对象经常用的如下: NSString. NSMutableString | NSArray.NSMutableArray, 分开说: A:NSString. NSMutableString 二者的copy方法返回类型为: [NSString copy]                         浅拷…
最近对深浅拷贝(复制)做了一些研究,在此将自己的理解写下来,希望对大家有所帮助.本人尚处在摸索阶段,希望各位予以指正. 本文包括如下方向的探索: 1.指针与对象: 2.深/浅拷贝(复制): 3.可变/不可变对象: 4.Objective-C中的copy与mutableCopy方法. 一.指针与对象 在初始学习编程的时候,对于绝大多数面向对象编程的语言,这都是个绕不开的重点与难点.非常惭愧的是对它的认识我一直是不够的,并且感觉这项技术有许多的内容可以挖掘.说这是面向对象编程的核心思想也不为过.很多…
(参考 iOS 52个技巧学习心得笔记 第二章 对象 , 消息, 运行期)的对象部分 关于Copy  有个经典问题”大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢” 或者说”为什么 NSString 类型成员变量的修饰属性用 copy 而不是 strong (或 retain ) ?” 明显 第一句比第二句 严谨多了. @property (strong,nonatomic) NSString *strongString; & @property…