直接上代码与运行结果:
- (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