首页 > 代码库 > NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝分析

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝分析

NSString,NSMutableString, NSArray ,NSMutableArray,NSDictionary,NSMutableDictionary 深拷贝,浅拷贝。

首先我们得知道什么是深拷贝,什么事浅拷贝。

简单点说深拷贝就是拷贝内容,浅拷贝就是拷贝指针。

上面那些类我们可以这样理解他们的深、浅拷贝。只要上面那些类中的NSString,NSArray,NSDictionary这三个类的实例化对象是调用copy方法进行拷贝那么他们拷贝的就是一个指针,就是说他们只是拷贝了一个指向同一块内存地址的指针。其他的类调用mutableCopy是深拷贝.如果上面那些类的实例化对象调用的是mutableCopy方法,那么他们拷贝的就是整个内容。也就是说重新开辟一块内存来存储要拷贝的数据,而新的指针变量就是指向这块新的内存的地址。

上面那些类只是系统为我们写好了copy,mutableCopy方法。如果我们自己写的一个类需要实现copy,mutableCopy方法时,我们需要去遵守NSCopying 和 NSMutableCopying 协议。究竟我们想要的是深拷贝还是浅拷贝是根据我们要怎么实现的这两个协议里的方法。如果在- (id)copyWithZone:(NSZone *)zone这个方法里写的是返回一个新创建的对象的地址那就是深拷贝,如果只是返回是self的话就是浅拷贝。- (id)mutableCopyWithZone:(NSZone *)zone是NSMutableCopying 协议里方法。如果我们自己写的类是深拷贝还是浅拷贝同样意识根据方法里我们怎么去实现它。