Copy和MUTableCopy

来源:互联网 发布:java怎么创建数组 编辑:程序博客网 时间:2024/06/16 08:58

Copy和MUTableCopy


在这之前先了解几个基本概念:
浅复制:指针复制(所谓指针复制,指两个指针指向同一块内存),并没有进行对象复制
单层深复制:对于集合类所说的,指的是只复制了该集合类的最外层,里面的元素没有复制(即两个集合类的地址不一样,但是两个集合里所存储的元素的地址是一样的)
完全复制:指的是完全复制整个集合类,也就是说两个集合地址不一样,里面所存储的元素地址也不一样


非集合类(NSString之类)[immutableObject copy]  //浅复制  [immutableObject mutableCopy] //深复制[mutableObject copy] //深复制[mutableObject mutableCopy] //深复制结论:不可变进行copy是浅复制,mutableCopy是深复制。可变:copy和mutableCopy都是深复制
集合类(NSArray之类)[immutableObject copy]  //浅复制[immutableObject mutableCopy] //单层深复制[mutableObject copy] //单层深复制[mutableObject mutableCopy] //单层深复制结论:不可变copy是浅复制,mutableCopy是单层深复制。可变:copy和mutableCopy都是单层深复制
那么,如何实现多层深复制呢?NSArray *copyArray = [[NSArray alloc] initWithArray:array copyItems:YES];  // 完全复制
需要注意的是:以上所说的两种情况默认都实现了NSCopying和NSMutableCopying协议,对于自定义继承NSObject的类,需要实现以下方法,否则copy会导致crash        copy需要实现NSCopying协议,然后实现以下方法,否则copy会crash-(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;    ·   }        mutableCopy时,需要实现NSMutableCopying协议,否则mutableCopy会crash-(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;    ·   }
原创粉丝点击