好吧,说我这样做。
NSMutableArray *array1=[NSMutableArray arrayWithObjects:@"poop", @"on", @"your", @"face", nil];
NSMutableArray *array2=array1;
[array2 removeAllObjects];
现在array1中有对象吗?
答案 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
指向内存中的该对象。
NSMutableArray *array2 = array1;
创建NSMutableArray类型的另一个指针array2
,并使其指向array1指向的内存中的同一对象。
[array2 removeAllObjects];
从array2
指向的可变Array对象中删除所有字符串
现在,由于array1和array2指向内存中的同一个对象,所以array1和array2现在都指向内存中没有对象的可变数组对象。