删除数组的对象是否等于另一个数组是否从两个数组中删除它们?

时间:2012-08-15 23:31:12

标签: objective-c arrays nsarray

好吧,说我这样做。

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

NSMutableArray *array2=array1;


[array2 removeAllObjects];

现在array1中有对象吗?

3 个答案:

答案 0 :(得分:2)

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

现在,如果您有以下内容:

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

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

答案 1 :(得分: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

答案 2 :(得分:1)

NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one", @"two", nil];

在内存中创建一个可变数组对象,其中包含字符串@“one和@”two“..并使数组对象指针array1指向内存中的该对象。

enter image description here

NSMutableArray *array2 = array1;

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

enter image description here

[array2 removeAllObjects];

从array2

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

enter image description here

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