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

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

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

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]];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容