美文网首页
copy和mutableCopy和直接赋值的区别

copy和mutableCopy和直接赋值的区别

作者: 严谨风 | 来源:发表于2015-12-01 16:17 被阅读251次

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

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

1、非容器对象

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

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

2、容器对象

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

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

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

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

直接赋值

结果如下:

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赋值

结果如下:

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和直接赋值的区别

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

  • 小结iOS中的copy

    介绍copy和mutableCopy 介绍深拷贝与浅拷贝 block为什么要用copy copy相对于直接赋值的好...

  • iOS开发中copy和mutableCopy赋值方法的异同

    本文逻辑图 copy和mutableCopy赋值的异同1.copy,mutableCopy都是深拷贝,也就是会重新...

  • 两个iOS面试题

    1.NSMutableArray和NSArray实例执行mutableCopy和copy方法的区别? 执行结果: ...

  • copy和mutableCopy的区别

    当复制对象是可变对象的时候:copy是复制部分内容,当然也不是简单的指针复制,应该是当前类的复制;mutableC...

  • copy和mutableCopy的区别

    首先以NSString为例,来看看copy和mutableCopy的区别是什么?上代码。 接下来我们来看看NSAr...

  • copy和mutableCopy的区别

    copy和mutableCopy的区别 深拷贝和浅拷贝的区别 在OC中对象的拷贝方式有两种:深拷贝和浅拷贝.浅拷贝...

  • copy和mutableCopy的区别

    mutableCopy 创建一个新的可变对象,并初始化为原对象的值,新对象的引用计数为 1; copy 返回一个不...

  • copy和mutableCopy的区别

    1,深拷贝和浅拷贝的区别 浅拷贝:并不拷贝对象本身,仅仅是拷贝指向目标对象的指针,并没有拷贝内容;深拷贝:直接拷贝...

  • iOS:浅谈 深.浅拷贝与copy.strong

    概要的测试了copy与mutableCopy的区别 深.浅拷贝●copy/mutableCopy NSString...

网友评论

      本文标题:copy和mutableCopy和直接赋值的区别

      本文链接:https://www.haomeiwen.com/subject/ycbjhttx.html