好吧,说我这样做。
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 里面有对象吗?
首先,你有没有试过看看会发生什么?:) 那应该马上回答你的问题。至于为什么会发生,那是因为在这个实例中只有一个数组。array2
只是一个指向的指针array1
(即,它们都指向同一个NSMutableArray
实例)。所以是的,如果你使用 引用数组array1
,你会看到它是空的。
现在,如果您有以下情况:
NSMutableArray *array2 = [NSMutableArray arrayWithArray:array1];
[array2 removeAllObjects];
array1
仍然有它的元素,因为它array2
是一个全新的NSMutableArray
实例。
如果您需要知道一个对象是否不同。你可以做==比较。或检查 %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
对象指针的值相同。
NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one", @"two", nil];
在内存中使用字符串 @"one 和 @"two" 创建一个可变数组对象 ..并使数组对象指针array1
指向内存中的该对象。
NSMutableArray *array2 = array1;
创建另一个array2
NSMutableArray 类型的指针,并使其指向 array1 指向的内存中的同一对象。
[array2 removeAllObjects];
从 array2 指向的可变 Array 对象中删除所有字符串
现在,由于 array1 和 array2 指向内存中的同一个对象,因此 array1 和 array2 现在都将指向内存中没有对象的可变数组对象。