美文网首页
copy multablecopy

copy multablecopy

作者: VincentHK | 来源:发表于2017-09-08 10:36 被阅读0次
    • (void)testCopy
      {
      NSArray * array = @[@"1",@"2",@"3"];
      NSArray * arr2 = [array copy];
      NSMutableArray * mul = [array mutableCopy];
      NSString * oriFirst = [array firstObject];
      NSString * mulFirst = [mul firstObject];
      NSLog(@"%@\n%@",array.firstObject,mul.firstObject);

      /**
      Printing description of array:
      <__NSArrayI 0x618000241c80>(
      1,
      2,
      3
      )
      Printing description of arr2:
      <__NSArrayI 0x618000241c80>(
      1,
      2,
      3
      )

     Printing description of mul:
     <__NSArrayM 0x618000242ca0>(
     1,
     2,
     3
     )
     
     可以见到,对于不可变的 arr 如果进行 copy 的话会进行浅拷贝,如果 mutableCopy 会进行内容拷贝。但是,通过图 3-2 打印出的地址信息,这里的内容拷贝仅仅是拷贝 array 这个对象,array 集合内的元素仍然是指针拷贝。所以可以定义为是单层深拷贝。
     */
    
    
    
    
    NSMutableArray * newMul = [NSMutableArray array];
    [newMul addObject:@"new1"];
    [newMul addObject:@"new2"];
    NSArray * copyMul = [newMul copy];
    NSMutableArray * copyMul2 = [newMul mutableCopy];
    
    NSString * oriFirst_ = [newMul firstObject];
    NSString * mulFirst_ = [copyMul2 firstObject];
    
    
    /**
     (__NSCFConstantString *) $1 = 0x000000010f1daf10 @"1"
     Printing description of newMul:
     <__NSArrayM 0x60000004bee0>(
     new1,
     new2
     )
     Printing description of copyMul:
     <__NSArrayI 0x60000003ec00>(
     new1,
     new2
     )
     
     
     Printing description of copyMul2:
     <__NSArrayM 0x60000004fab0>(
     new1,
     new2
     )
     
     
     对于可变的集合元素的 copy 与 mutableCopy 都是单层深复制。
     */
    NSLog(@"hello");
    
    /**
     
     对于非集合对象
     copy:因为copy默认返回的是不可变的,所以当我们对一个不可变的字符串进行copy的时候,我们只是拷贝了它的指针(浅拷贝)。当我们对一个可变的字符串进行拷贝的时候,因为类型转变了,我们需对其进行深拷贝。
     mutableCopy:默认返回的是一个可变的对象,适用于可变的对象,例如NSMutableString,NSMutableArray,NSMutableDictionary、etc。  无论对于可变的字符串还是不可变的字符串进行mutableCopy,系统都默认进行深拷贝,那么为什么对于相同类型的进行mutableCopy返回的仍然是新的对象呢,因为在这里系统要保证,旧的对象和新的对象都是可变的,切他们之前不会相互影响。
     
     对于集合对象
     对于不可变的集合对象,copy 是浅拷贝,mutableCopy 是单层深拷贝。
     对于可变的集合对象,无论 copy 或者 mutableCopy 都是单层深拷贝。
     
    
     */
    

    }

    相关文章

      网友评论

          本文标题:copy multablecopy

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