NSArray、NSMutableArray的copy、mutableCopy操作

直接上代码与运行结果:

- (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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容