美文网首页
[array copy] 和 [NSArray arrayWit

[array copy] 和 [NSArray arrayWit

作者: 魔力双鱼 | 来源:发表于2018-11-24 10:33 被阅读0次

    1.如果array是immutable类型的NSArray

    • copy只是retain,没有创建新对象
    • arrayWithArray 创建了新的NSArray对象,并将原有数组元素填充进去,数组元素还是原来的对象

    上代码验证:

        NSArray *array = @[@"1",@"2"];
        NSArray *copyArray = [array copy];
        NSArray *arrayWithArray = [NSArray arrayWithArray:array];
    

    控制台输出结果:

    (lldb) po array
    <__NSArrayI 0x1d003e3c0>(
    1,
    2
    )
    
    (lldb) po copyArray
    <__NSArrayI 0x1d003e3c0>(
    1,
    2
    )
    
    (lldb) po arrayWithArray
    <__NSArrayI 0x1d003e440>(
    1,
    2
    )
    

    如果是array ==nil,控制台输出:

    (lldb) po array
     nil
    (lldb) po copyArray
     nil
    (lldb) po arrayWithArray
    <__NSArray0 0x1d4009620>(
    
    )
    

    2.如果array是mutable类型的NSArray

    二者最终结果是等效的,创建了新的NSArray对象,但数据元素还是原来的对象

    • 如果array == nil,copy的结果是nil
    • arrayWithArray 结果是长度为0的NSArray对象

    上代码验证:

        NSMutableArray *array = [NSMutableArray arrayWithObjects:@"1",@"2", nil];
        NSArray *copyArray = [array copy];
        NSArray *arrayWithArray = [NSArray arrayWithArray:array];
    

    控制台输出:

    (lldb) po array
    <__NSArrayM 0x1d064c3c0>(
    1,
    2
    )
    
    (lldb) po copyArray
    <__NSArrayI 0x1d0225900>(
    1,
    2
    )
    
    (lldb) po arrayWithArray
    <__NSArrayI 0x1d022e5a0>(
    1,
    2
    )
    

    无论哪种情况,数组元素都是共享的 不会被复制

    相关文章

      网友评论

          本文标题:[array copy] 和 [NSArray arrayWit

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