NSMutableArray はどのように実装されていますか?
ソース配列などの可変配列への NSMutableArray 参照が多数あり、これらのポインティング配列のそれぞれがオブジェクトを異なる方法でソートする場合、オブジェクトは各配列にコピーされますか、それともオブジェクト ポインターは内部的に再配置されますか?
ソース配列が新しいオブジェクトで更新された場合、NSMutableArray ポインタは自動的にエントリを内部参照に追加します。
NSMutableArray はどのように実装されていますか?
ソース配列などの可変配列への NSMutableArray 参照が多数あり、これらのポインティング配列のそれぞれがオブジェクトを異なる方法でソートする場合、オブジェクトは各配列にコピーされますか、それともオブジェクト ポインターは内部的に再配置されますか?
ソース配列が新しいオブジェクトで更新された場合、NSMutableArray ポインタは自動的にエントリを内部参照に追加します。
ポインタを格納するだけです。これは、NSMutableArray が不変オブジェクトを格納する場合、それらの状態が変わらないことは確かですが、可変オブジェクトがある場合、参照されるオブジェクトの状態はいつでも変更される可能性があることを意味します。
正確には、それがどのように実装されているのかわかりませんが、id へのポインターと言えます。メモリを割り当ててから、必要なインデックスで id を更新します。
id* pointers;
< Allocation>
pointers[i]= newObjectPointer;
あなたが求めているシナリオを正確に解析するのは少し難しいですがNS(Mutable)Array
、オブジェクト参照のリストを保持しています。追加したオブジェクトをコピーするのではなく、ポインタを保持するだけです。これらのオブジェクトが変更される可能性があり、それらを配列の外部から変更すると、配列から読み取ったものに反映されます。
NSMutableArray * arr = [NSMutableArray array];
NSMutableArray * child = [NSMutableArray array];
[child addObject:@5];
[arr addObject:child];
[child addObject:@6];
NSLog(@"%@", arr[0]);
> [5, 6]