美文网首页
NSArray、NSMutableArray的copy、muta

NSArray、NSMutableArray的copy、muta

作者: 传说中的汽水枪 | 来源:发表于2018-05-09 16:38 被阅读4次

    直接上代码与运行结果:

    - (void)test {
        NSArray *ary1 = @[@(1), @(2)];
        id ary2 = [ary1 copy];
        id ary3 = [ary1 mutableCopy];
        
        printf("\n==========NSArray==========\n");
        printf("ary1 class:%s, address:%p\n", [NSStringFromClass([ary1 class]) UTF8String], ary1);
        printf("ary2 class:%s, address:%p\n", [NSStringFromClass([ary2 class]) UTF8String], ary2);
        printf("ary3 class:%s, address:%p\n", [NSStringFromClass([ary3 class]) UTF8String], ary3);
        
        NSMutableArray *ary4 = [NSMutableArray arrayWithArray:@[@(1), @(2)]];
        id ary5 = [ary4 copy];
        id ary6 = [ary4 mutableCopy];
        printf("\n==========NSMutableArray==========\n");
        printf("ary4 class:%s, address:%p\n", [NSStringFromClass([ary4 class]) UTF8String], ary4);
        printf("ary5 class:%s, address:%p\n", [NSStringFromClass([ary5 class]) UTF8String], ary5);
        printf("ary6 class:%s, address:%p\n", [NSStringFromClass([ary6 class]) UTF8String], ary6);
        
        NSArray *ary7 = [NSMutableArray arrayWithArray:@[@(1), @(2)]];
        id ary8 = [ary7 copy];
        id ary9 = [ary7 mutableCopy];
        printf("\n==========Pretend NSArray==========\n");
        printf("ary7 class:%s, address:%p\n", [NSStringFromClass([ary7 class]) UTF8String], ary7);
        printf("ary8 class:%s, address:%p\n", [NSStringFromClass([ary8 class]) UTF8String], ary8);
        printf("ary9 class:%s, address:%p\n", [NSStringFromClass([ary9 class]) UTF8String], ary9);
    }
    

    运行结果:

    ==========NSArray==========
    ary1 class:__NSArrayI, address:0x1c0026720
    ary2 class:__NSArrayI, address:0x1c0026720
    ary3 class:__NSArrayM, address:0x1c0040810
    
    ==========NSMutableArray==========
    ary4 class:__NSArrayM, address:0x1c0040930
    ary5 class:__NSArrayI, address:0x1c0026600
    ary6 class:__NSArrayM, address:0x1c0040960
    
    ==========Pretend NSArray==========
    ary7 class:__NSArrayM, address:0x1c00408a0
    ary8 class:__NSArrayI, address:0x1c00262a0
    ary9 class:__NSArrayM, address:0x1c0040900
    

    结论:
    __NSArrayI代表 NSArray, __NSArrayM代表NSMutableArray
    ary2,5,8 得出结论是只要是copy 返回的都是NSArray
    ary3,6,9 只要是mutableCopy 返回的都是NSMutableArray
    NSArray copy的时候返回的跟原地址是一样的NSArray
    NSArray mutableCopy的时候返回新的一个NSMutableArray
    NSMutableArray copy 返回一个新的NSArray
    NSMutableArray mutableCopy的时候返回新的一个NSMutableArray

    相关文章

      网友评论

          本文标题:NSArray、NSMutableArray的copy、muta

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