美文网首页iOS开发
copy和mutablecopy小tip

copy和mutablecopy小tip

作者: 渡边君WM | 来源:发表于2018-09-05 08:55 被阅读19次

    原则就是:修改新(旧)对象,不影响旧(新)对象!而且不一定产生新的对象!(划重点)

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

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

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

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

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

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

    对于NSArray,NSDictionary,道理也是相同的。

    相关文章

      网友评论

        本文标题:copy和mutablecopy小tip

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