copy和mutableCopy和直接赋值的区别

在iOS中常见的赋值方式有三种,分别是直接赋值、copy赋值、mutableCopy赋值。那么这三种赋值方式有什么区别呢?

在ChinaCocoa论坛的一个帖子中我看到了如下的说法(地址:http://www.cocoachina.com/bbs/read.php?tid-135884.html)。

1、非容器对象

对不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。

对可变对象复制,都是深拷贝,但是copy返回的对象是不可变的。

2、容器对象

对于容器本身,同非容器对象。

但是,对于容器内的对象,则都是指针复制。真正的深拷贝(即容器本身、容器内的对象均为深拷贝),

本着实事求是的原则,我进行了一些测试。

首先拿容器对象Array来进行测试,代码如下:


copy和mutableCopy和直接赋值的区别_第1张图片
直接赋值

结果如下:

2015-12-01 16:01:20.113 iOS7CookBook[2920:110384] 1

2015-12-01 16:01:20.113 iOS7CookBook[2920:110384] 2

2015-12-01 16:01:20.114 iOS7CookBook[2920:110384] 3

从结果可知,直接赋值是浅拷贝,是指针赋值。


copy和mutableCopy和直接赋值的区别_第2张图片
copy赋值

结果如下:

2015-12-01 16:02:57.797 iOS7CookBook[2976:111457] 1

2015-12-01 16:02:57.797 iOS7CookBook[2976:111457] 2

从结果可知,copy赋值是深拷贝,是对象复制。

mutableCopy的测试结果和copy相同,不再上图。两者的区别就是返回的对象的类型分别为__NSArrayM和__NSArrayI,前者是可变数组,后者是不可变数组。

Dictionary测试结果同Array,不再上图。

你可能感兴趣的:(copy和mutableCopy和直接赋值的区别)