我正在尝试打印数组的内存地址,但我得到的所有三个数组的内存地址都相同 让我解释更多 我取了三个数组
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 打印相同的地址。 预先感谢您的帮助
最佳答案
第一个 NSLog 打印数组。第二个 NSLog 打印了存储数组的三个变量的地址。对于第二个 NSLog,即使您从未分配数组,您也会得到相同的结果。
第一个 NSLog 打印相同地址三次的原因是 [[NSArray alloc] init] 将总是返回相同的对象。调用 [[NSArray alloc] init] 十亿次,只会创建一个 NSArray 对象。既然 NSArray 是不可变的,你永远不能向这个空数组添加任何东西,为什么操作系统要浪费空间分配多个数组呢? (如果你有很多空数组,这实际上是一个非常有用的优化)。
关于ios - NSArray 地址问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31099101/