NSArray、NSMutableArray的copy、muta

2018-05-09  本文已影响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

上一篇下一篇

猜你喜欢

热点阅读