所有系统容器类的copy或mutableCopy方法,都是浅拷贝!!! (ps:什么是容器?比如NSArray,NSMutableArray,NSDictionary,NSMutableDictionary) 很多人一直认为,copy 是浅拷贝,mutableCopy 是深拷贝.我以前也是这么认为的.甚至很多网上的教学视频,很多书籍,很多博客,都是这么说的.但是,这大错特错! 为了防止有人不信,我们先拿出决定性的证据,然后再说其他的. There are two kinds of object…
阅读本文之前首先了解copy与retain的区别,如果有不正确的地方望大家多多指教: copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化.copy减少对象对上下文的依赖. retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝. 当然…
深拷贝与浅拷贝(mutableCopy与Copy)详解 iOS ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopying 协议的类可以发送copy消息,遵守NSMutableCopying 协议的类才可以发送mutableCopy消息.假如发送了一个没有遵守上诉两协议而发送 copy或者 mutableCopy,那么就会发生异常.但是默认的ios类并没有遵守这两个协议.如果想自定义一下copy 那么就必须遵守NSCopying,并且实现 copyWithZone:…
copy与retain的区别: copy是创建一个新对象,retain是创建一个指针,引用对象计数加1.Copy属性表示两个对象内容相同,新的对象retain为1 ,与旧有对象的引用计数无关,旧有对象没有变化.copy减少对象对上下文的依赖. retain属性表示两个对象地址相同(建立一个指针,指针拷贝),内容当然相同,这个对象的retain值+1也就是说,retain 是指针拷贝,copy 是内容拷贝. 当然在ios中并不是所有的对象都支持copy,mutableCopy,遵守NSCopyin…
对象拷贝主要由两种方式:copy和mutableCopy.浅拷贝是指直接将指针指向原有的地址,从而达到复制的目的.深拷贝是指重新生成一个对象,将原有对象的内容复制到新的对象中.copy 返回的是一个不可变的对象,mutableCpoy返回的是一个可变的对象,但是由于OC的弱语法特性,即使如下使用编译器也不会报错.但是再运行时,arrayCopy会找不到具体的方法,报错. NSMutableArray *arrayCopy=[muArray copy]; copy当所引用的对象是可变的时,则是深拷…
 首先,什么是copy? Copy的字面意思是“复制”.“拷贝”,是一个产生副本的过程. 常见的复制有:文件复制,作用是利用一个源文件产生一个副本文件. 特点:1.修改源文件的内容,不会影响副本文件: 2.修改副本文件的内容,不会影响源文件. OC中copy的作用是:利用一个源对象产生一个副本对象 特点:1.修改源对象的属性和行为,不会影响副本对象: 2.修改副本对象的属性和行为,不会影响源对象.  如何使用copy功能? 一个对象可以调用copy或mutableCopy方法来创建一个副本对象.…
13.4 What is the difference between deep copy and shallow copy? Explain how you would use each. 这道题问深拷贝和浅拷贝的区别.浅拷贝复制对象中所有的成员值到另一个对象中,而深拷贝不仅复制这些,还复制所有的指针对象,参见下面代码: struct Test { char *ptr; }; void shallow_copy(Test &src, Test &dest) { dest.ptr = sr…
在Objective-C中对象之间的拷贝分为浅拷贝和深拷贝.说白了,对非容器类的浅拷贝就是拷贝对象的地址,对象里面存的内容仍然是一份,没有新的内存被分配.对非容器类的深拷贝就是重写分配一块内存,然后把另一个对象的内容原封不动的给我拿过来.对容器类的深拷贝是对容器中的每个元素都进行拷贝,容器类的浅拷贝是对容器里的内容不进行拷贝,两个容器的地址是不同的,但容器里的所装的东西是一样的,在一个容器中修改值,则另一个浅拷贝的容器中的值也会变化.所以对非容器类看对象是否为深拷贝还是浅拷贝就得看对象的内存地址…
Objective - C 中有很多在日常项目中经常用到的常用代码,在这里着重的讲一下关于copy 和 mutableCopy 的区别以及相关用法. Objective - C 中可变对象和不可对象经常用的如下: NSString. NSMutableString | NSArray.NSMutableArray, 分开说: A:NSString. NSMutableString 二者的copy方法返回类型为: [NSString copy]                         浅拷…
对象拷贝(复制对象) 1.复制对象顾名思义,复制一个对象作为副本,它会开辟一块新的一块内存(堆内存)来存储副本对象,就像复制文件一样.即源对象和副本对象是两块不同的内存区域.   2.NSObject类提供了copy和mutableCopy方法,通过这两个方法即可复制已有对象的副本.因此,对象想要具备复制功能,必须实现NSCopying或NSMutableCopy协议. 3.在iOSSDK中常 的可复制对象有:NSNumber.NSString .NSArray.NSDictionary.NSM…