A-A+

copy和mutablecopy小tip

博客主机

Mutablecopy返回的是一个可变的副本(新的对象,系统分配新的内存地址,修改副本不牵涉到源对象)

Copy返回的是一个不可变的副本(修改副本不牵涉到源对象;分不分配内存,看应用场景,下例)

当我们对一个不可变对象(NSString类型)使用copy关键字的时候,系统是不会产生一个新对象,因为原来的对象是不能修改的,拷贝出来的对象也是不能修改的,那么既然两个都不可以修改,所以这两个对象永远也不会影响到另一个对象(符合我们说的“修改新(旧)对象,不影响旧(新)对象”原则),系统为了节省内存,所以就不会产生一个新的对象了。

那么问题来了, copy到底是深拷贝还是浅拷贝?

我相信有的同学认为只要是使用copy关键字,那么肯定都是深拷贝,这样是很不严谨的,就比如上个例子,虽然使用了copy,但是指针地址是一样,那么它就应该是浅拷贝。

所以是否是深浅拷贝,是否创建新的对象,是由程序运行的环境所造成的,并不是一概而论。

给我留言

Copyright © ios教程,苹果粉丝,苹果资讯,ios入门教程,ios学习,ios程序员,ios视频教程,ios粉丝网 保留所有权利.   Theme  Ality

用户登录