我觉得你想多了。你不会有一个“指向” NSArray 的指针。您将有一个指向对象的指针,并且 NSArray 也将有一个指向该对象的指针。重新分配指针不会改变 NSArray 中的指针。
至于复制,NSArray 不复制对象。但如上所述,它确实将指针复制到对象,而不是持有指向指针的指针或类似的奇怪东西。所以在这段代码中:
NSMutableString *a = [NSMutableString stringWithString:@"Cool"];
NSMutableString *b = a;
NSMutableArray *array = [NSMutableArray array];
[array addObject:a];
NSMutableString *c = [array objectAtIndex:0];
[b appendString:@" beans"];
a = nil;
在运行结束时:
b
并且c
将持有相同的 NSMutableString - “Cool beans” - 并且变异其中一个会出现在另一个中
b
该数组包含与“Cool beans”相同的 NSMutableString,c
并且访问那里的字符串也会显示字符串的突变
a
将为零。当我们重置它时,这不会影响指向字符串的任何其他指针,因为它们指向的是字符串,而不是变量。
当 you 时addObjectsFromArray:
,就好像您遍历数组并单独添加每个数组一样。那个时候另一个数组可能会消失,这并不重要,因为你的 NSArray 现在有指向所有对象的指针。