整个《面试题》都是对[2017年6月iOS招人心得(附面试题)]的整理
1.可变集合类 和 不可变集合类的 copy 和 mutablecopy有什么区别?
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]];