我试图打印阵列的内存地址,但我为所有三个阵列获取相同的内存地址 让我解释一下 我采取了三个阵列
NSArray *arr1 = [[NSArray alloc]init];
NSArray *arr2 = [[NSArray alloc]init];
NSArray *arr3 = [[NSArray alloc]init];
当我打印内存地址时
NSLog(@"arr1 = %p, arr2 = %p, arr3 = %p", arr1, arr2, arr3);
所有内存地址相同
输出:
arr1 = 0x7f9c01d21550, arr2 = 0x7f9c01d21550, arr3 = 0x7f9c01d21550
但是当我使用此代码打印内存地址时
NSLog(@"arr1 = %p, arr2 = %p, arr3 = %p", &arr1, &arr2, &arr3);
内存地址不同
输出:
arr1 = 0x7fff5fb8e338, arr2 = 0x7fff5fb8e330, arr3 = 0x7fff5fb8e328
我不知道为什么第一个NSLog会打印相同的地址。 在此先感谢您的帮助
答案 0 :(得分:2)
第一个NSLog打印了阵列。第二个NSLog打印了存储数组的三个变量的地址。对于第二个NSLog,即使您从未分配过数组,也会获得相同的结果。
第一个NSLog打印相同地址三次的原因是[[NSArray alloc] init] 总是返回一个相同的对象。调用[[NSArray alloc] init]十亿次,只创建一个 NSArray对象。由于NSArray是不可变的,并且您永远不能向此空数组添加任何内容,为什么操作系统会浪费空间来分配多个数组? (如果您有许多空数组,这实际上是一个非常有用的优化。)