あなたはこれを考えすぎていると思います。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
この配列は、「クール ビーンズ」と同じ NSMutableString を保持し、c
そこにある文字列にアクセスすると、文字列への変更も表示されます。
a
ゼロになります。これは、変数ではなく文字列を指しているため、リセット時に文字列への他のポインターには影響しませんでした。
するとaddObjectsFromArray:
、配列を繰り返し処理して、それぞれを個別に追加したかのようになります。NSArray にはすべてのオブジェクトへのポインターがあるため、他の配列はその時点で消える可能性がありますが、問題にはなりません。