赋值运算符是否生成 NSArray 的浅表副本?

Does the assignment operator make a shallow copy of an NSArray?

假设我有两个数组:

NSArray *A = @[@"Red", @"Blue", @"Yellow"];
NSArray *B = A;

从技术上讲,B 是 A 的浅拷贝吗?如果我对 A 中包含的数据进行更改,B 会看到相同的更改,反之亦然。在查看 Apple 文档中的复制时,并未提及通过“=”运算符进行的简单相等是进行浅表复制的有效方法。如果这不构成浅拷贝,那么它是什么?

作业(在 Objective-C 中)根本不是副本。也就是说,它不是对象的副本,它只是对对象的引用的副本。每个对象(引用)都必须声明为指针是有原因的。 (块是一种特殊情况。)

浅拷贝是通过复制方法完成的,如:NSArray *B = [A copy];

碰巧你不能修改 NSArrays,但原则也适用于 NSMutableArrays。

NSMutableArray *a = [@[@"Red", @"Blue", @"Yellow"] mutableCopy];
NSMutableArray *b = a;
NSMutableArray *c = [a mutableCopy];

NSLog(@"%@, %@, %@", a[0], b[0], c[0]);  // Prints: Red, Red, Red

b[0] = @"Green";

NSLog(@"%@, %@, %@", a[0], b[0], c[0]);  // Prints: Green, Green, Red

c[0] = @"Purple";

NSLog(@"%@, %@, %@", a[0], b[0], c[0]);  // Prints: Green, Green, Purple