0

わかりました、私がこれをすると言います。

NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"poop", @"on", @"your", @"face", nil];

NSMutableArray *array2=array1;


[array2 removeAllObjects];

現在、array1 にはオブジェクトが含まれていますか?

4

3 に答える 3

2

まず、どうなるか試してみましたか?:) それはあなたの質問にすぐに答えるはずです。なぜそうなるのかというと、このインスタンスには配列が 1 つしかないからです。array2は単なるポインタですarray1(つまり、両方とも同じNSMutableArrayインスタンスを指しています)。そうです、 を使用して配列をarray1参照すると、それが空であることがわかります。

次のものがあったとします。

NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];
[array2 removeAllObjects];

array1array2は完全に新しいNSMutableArrayインスタンスであるため、要素は引き続き保持されます。

于 2012-08-15T23:37:14.813 に答える
1
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one", @"two", nil];

文字列@"oneおよび@"two"を使用してメモリ内に可変配列オブジェクトを作成し、配列オブジェクトポインタarray1がメモリ内のそのオブジェクトを指すようにします。

ここに画像の説明を入力してください

NSMutableArray *array2 = array1;

タイプNSMutableArrayの別のポインターarray2を作成し、それがarray1が指しているのと同じメモリー内のオブジェクトを指すようにします。

ここに画像の説明を入力してください

[array2 removeAllObjects];

array2が指す可変Arrayオブジェクトからすべての文字列を削除します

ここに画像の説明を入力してください

これで、array1とarray2はメモリ内の同じオブジェクトを指すため、array1とarray2の両方が、オブジェクトを含まないメモリ内の可変配列オブジェクトを指すようになります。

于 2012-08-15T23:55:34.243 に答える
1

オブジェクトが異なるかどうかを知る必要がある場合。== 比較を行うことができます。または、%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

于 2012-08-15T23:41:47.663 に答える