美文网首页
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

    (void)testCopy{NSArray * array = @[@"1",@"2",@"3"];NSArra...

  • Copy Copy Copy

    说到Copy 大多会想到浅复制(指针复制),深复制(内容复制)。看一张图: 你会发现对于集合类型,深复制那写的是...

  • 2018-09-27

    copy的问题 copy.copy返回浅copy copy.deepcopy返回深copy 1fromcopyim...

  • 关于深copy和浅copy

    深copy 所谓深copy是指内容copy 浅copy 所谓浅copy是指指针copy 集合的单层深copy 在多...

  • golang 值和指针

    地址copy,引用copy 值copy

  • Python的直接赋值,深拷贝和浅拷贝以及使用场景

    概述 深浅拷贝用法来自copy模块导入模块: import copy浅拷贝: copy.copy深拷贝: copy...

  • day 9

    浅拷贝和深拷贝 copy.copy(对象):浅拷贝 copy.deepcopy(对象):深拷贝 copy.copy...

  • day-9-函数基础

    import copy"""copy.copy(对象):浅拷贝copy.deepcopy(对象):深拷贝""" a...

  • 深浅拷贝判断地址是否相同

    导入 import copy 模块 浅拷贝:copy.copy() 深拷贝:copy.deepcopy() 代码:...

  • 内存管理

    ARC MRC 属性 循环引用 深浅copy一 ,先说深浅copy概念很简单 浅copy 就是copy...

网友评论

      本文标题:copy multablecopy

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