美文网首页
7.可变集合类 和 不可变集合类的 copy 和 mutable

7.可变集合类 和 不可变集合类的 copy 和 mutable

作者: 豆丶浆油条 | 来源:发表于2017-09-06 15:45 被阅读183次

    整个《面试题》都是对[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]];
    

    相关文章

      网友评论

          本文标题:7.可变集合类 和 不可变集合类的 copy 和 mutable

          本文链接:https://www.haomeiwen.com/subject/prwmjxtx.html