7.可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?

整个《面试题》都是对[2017年6月iOS招人心得(附面试题)]的整理

1.可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?

7.可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?_第1张图片
2030896-5b744f044027a0c1.png

2.如果集合是内容复制的话,集合里面的元素也是内容复制么?

不是,是单层深拷贝。
  集合的深复制有两种方法。可以用initWithArray:copyItems:将第二个参数设置为YES即可深复制

NSDictionary shallowCopyDict=[[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES];

如果你用这种方法深复制,集合里的每个对象都会收到copyWithZone:消息。如果集合里的对象遵循NSCopying协议,那么对象就会被深复制到新的集合。如果对象没有遵循NSCopying协议,而尝试用这种方法进行深复制,会在运行时出错。copyWithZone:这种拷贝方式只能够提供一层内存拷贝(one-level-deepcopy),而非真正的深复制。

第二个方法是将集合进行归档(archive),然后解档(unarchive),如:

NSArray*trueDeepCopyArray=[NSKeyedUnarchiver unarchiveObjectWithData:[NSKeyedArchiver archivedDataWithRootObject:oldArray]];

你可能感兴趣的:(7.可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?如果是集合是内容复制的话,集合里面的元素也是内容复制么?)