iOS面试iOS DeveloperiOS 开发

OC中copy和mutableCopy的详细用法

2016-08-11  本文已影响828人  小码农_gjw

前言

首先我们要先明白一个概念,什么是浅复制,单层深复制,完全复制(每一层都深复制)
明白了这三个概念之后,我们就来说一下他们的区别所在:
 [immutableObject copy]  //浅复制  
 [immutableObject mutableCopy] //深复制
 [mutableObject copy] //深复制
 [mutableObject mutableCopy] //深复制

结论:不可变进行copy是浅复制,mutableCopy是深复制,可变的copy,mutableCopy都是深复制

 [immutableObject copy]  //浅复制
 [immutableObject mutableCopy] //单层深复制
 [mutableObject copy] //单层深复制
 [mutableObject mutableCopy] //单层深复制

结论:不可变进行copy是浅复制,mutableCopy是单层深复制,可变的copy,mutableCopy都是单层深复制

那么如何实现多层复制呢?

我们以NSArray举例说明

 NSArray *copyArray = [[NSArray alloc] initWithArray:array copyItems:YES];  // 完全复制
需要特别注意的是

以上我们所说的两种情况默认都实现了NSCopying和NSMutableCopying协议
对于自定义继承自NSObject的类

-(id)copyWithZone:(NSZone *)zone {
     CopyObject  *copy = [[[self class] alloc] init];
     copy.name = self.name;
     copy.mobile = self.mobile;
     copy.company = self.company;
     copy.descInfo = self.descInfo;
     return copy;
 }
 -(id)mutableCopyWithZone:(NSZone *)zone {
     MutableCopyObject  *mutableCopy = [[[self class] alloc] init];
     mutableCopy.name = self.name;
     mutableCopy.mobile = self.mobile;
     mutableCopy.company = self.company;
     mutableCopy.descInfo = self.descInfo;
     return mutableCopy;
 }
上一篇下一篇

猜你喜欢

热点阅读