わかりました、私がこれをすると言います。
NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"poop", @"on", @"your", @"face", nil];
NSMutableArray *array2=array1;
[array2 removeAllObjects];
現在、array1 にはオブジェクトが含まれていますか?
わかりました、私がこれをすると言います。
NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"poop", @"on", @"your", @"face", nil];
NSMutableArray *array2=array1;
[array2 removeAllObjects];
現在、array1 にはオブジェクトが含まれていますか?
まず、どうなるか試してみましたか?:) それはあなたの質問にすぐに答えるはずです。なぜそうなるのかというと、このインスタンスには配列が 1 つしかないからです。array2
は単なるポインタですarray1
(つまり、両方とも同じNSMutableArray
インスタンスを指しています)。そうです、 を使用して配列をarray1
参照すると、それが空であることがわかります。
次のものがあったとします。
NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];
[array2 removeAllObjects];
array1
array2
は完全に新しいNSMutableArray
インスタンスであるため、要素は引き続き保持されます。
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one", @"two", nil];
文字列@"oneおよび@"two"を使用してメモリ内に可変配列オブジェクトを作成し、配列オブジェクトポインタarray1
がメモリ内のそのオブジェクトを指すようにします。
NSMutableArray *array2 = array1;
タイプNSMutableArrayの別のポインターarray2
を作成し、それがarray1が指しているのと同じメモリー内のオブジェクトを指すようにします。
[array2 removeAllObjects];
array2が指す可変Arrayオブジェクトからすべての文字列を削除します
これで、array1とarray2はメモリ内の同じオブジェクトを指すため、array1とarray2の両方が、オブジェクトを含まないメモリ内の可変配列オブジェクトを指すようになります。
オブジェクトが異なるかどうかを知る必要がある場合。== 比較を行うことができます。または、%p ポインターの値を確認してください。
if (array1 == array2) { NSLog(@"These variables point to the same array"); }
NSLog(@"Address of Array1 is (%p) Address of Array2 is (%p)",array1, array2);
これにより、id オブジェクトが異なるか、まったく同じオブジェクトであるかがわかります。
ポインタが同じ値である場合。それらは同じオブジェクトです。オブジェクトポインターが同じ値である場合に発生し(obj1 == obj2)
ます。YES