0

好吧,说我这样做。

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

NSMutableArray *array2=array1;


[array2 removeAllObjects];

现在 array1 里面有对象吗?

4

3 回答 3

2

首先,你有没有试过看看会发生什么?:) 那应该马上回答你的问题。至于为什么会发生,那是因为在这个实例中只有一个数组。array2只是一个指向的指针array1(即,它们都指向同一个NSMutableArray实例)。所以是的,如果你使用 引用数组array1,你会看到它是空的。

现在,如果您有以下情况:

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

array1仍然有它的元素,因为它array2是一个全新的NSMutableArray实例。

于 2012-08-15T23:37:14.813 回答
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 回答
1
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one", @"two", nil];

在内存中使用字符串 @"one 和 @"two" 创建一个可变数组对象 ..并使数组对象指针array1指向内存中的该对象。

在此处输入图像描述

NSMutableArray *array2 = array1;

创建另一个array2NSMutableArray 类型的指针,并使其指向 array1 指向的内存中的同一对象。

在此处输入图像描述

[array2 removeAllObjects];

从 array2 指向的可变 Array 对象中删除所有字符串

在此处输入图像描述

现在,由于 array1 和 array2 指向内存中的同一个对象,因此 array1 和 array2 现在都将指向内存中没有对象的可变数组对象。

于 2012-08-15T23:55:34.243 回答