0

だから私は私がするときに何が起こるのだろうかと思っています

NSMutableArray *arr1 = [[NSMutableArray alloc] init];
NSMutableArray *arr2 = [[NSMutableArray alloc] init];

[arr1 addobject:ob1];

arr2 = arr1;

[self changeValue:[arr2 objectAtIndex:2]]; //function that will modify what is sent to it


1)nsmutablearraysの間で=を実行することもできますか?
2)arr1のオブジェクトにアクセスする場合、それは変更されますか?
3)それはどれくらい深いですか?-他の場所からそのオブジェクトにアクセスする場合、変更されますか?
4)mutableCopyを使用すると、まったく新しい配列が返されると思います。
5)このディープリンク/接続をシミュレートする方法はありますか?たとえば、同じオブジェクトを2つの異なる配列に割り当てたい場合、1つを変更すると、両方の配列でそのオブジェクトが変更されますか?
6)これを表す言葉は何ですか?私はそれがリンク/接続しているとは思わない。

どうもありがとう
-ジェームズ

4

1 に答える 1

6

オブジェクトと変数を混同していると思います。あるオブジェクトを別のオブジェクトに割り当てることはありません。オブジェクトを変数に割り当てます。変数は、オブジェクトを監視するための単なる方法であり、そうでなければ、プログラムのメモリ空間のどこかに浮かんでしまいます。2つの変数が同じオブジェクトを指すことができます。これが発生すると、同じオブジェクトであるため、両方の変数を介してオブジェクトに変更が加えられます

を実行するとarr2 = arr1、arr2がarr1と同じ配列を指すようになります。では、arr1で何かを変更した場合、arr2でそれが表示されますか?はい、arr2arr1であるためです。これは同じオブジェクトであり、2つの異なる名前と呼ばれています。

代わりにarr2 = [arr1 mutableCopy]、そうだった場合、新しい配列オブジェクトが作成されるため、2つの変数は異なるオブジェクトを指します。オブジェクトを一方の配列に追加しても、魔法のようにもう一方の配列に追加されることはありません。しかし、これは疑問を投げかけます:arr1にNSMutableStringsの束が含まれている場合はどうなりますか?arr1の文字列の1つを変更すると、arr2の対応する文字列も変更されますか?はい。配列自体は別のオブジェクトですが、元の配列と同じオブジェクトが含まれているためです。

したがって、これについて考える方法は、2つのアレイが何らかの形でリンクまたは接続されているということではありません。あなたが尋ねる必要がある唯一の質問は、「私が2つの場所で相互作用しているこれらのオブジェクトは同じオブジェクトですか、それとも異なるオブジェクトですか?」です。

于 2013-03-26T18:40:11.900 に答える