关于copy和mutableCopy方法

        OC中创建对象副本的方法有copy和mutableCopy,一个对象在调用copy方法时需要先实现NSCopying协议,通过此方法创建的是不可变的副本;对象在调用mutableCopy方法时需要先实现NSMutableCopying协议,通过此方法创建的时可改变的副本对象。

        在使用这两个方法的时候涉及到两个概念:

        1、深复制

        2、浅复制

        下面来说一下这两者的区别。

        深复制:是进行内容拷贝,源对象指针和副本对象指针指向的是不同的两个对象。源对象引用计数不变,副本对象引用计数不变。

        浅复制:只进行指针拷贝,源对象指针和副本对象指针指向的是同一个对象。对象的引用计数+1,类似做了一次retain操作。

        

        用NSMutableString和NSString对象来举例:

        1、NSMutableString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象

        2、NSMutableString对象调用copy方法,深复制,返回一个NSString对象

        3、NSString对象调用mutableCopy方法,深复制,返回一个NSMutableString对象

        4、NSString对象调用copy方法,浅复制,返回一个NSString对象(因为NSString在调用copy方法后返回的仍是一个不可更改的对象,所以为了效率,这两个对象其实是同一个对象,只进行了指针copy,类似于进行了retain操作)。

你可能感兴趣的:(table)