gpt4 book ai didi

ios - NSArray 地址问题

转载 作者:行者123 更新时间:2023-11-29 10:28:12 28 4
gpt4 key购买 nike

我正在尝试打印数组的内存地址,但我得到的所有三个数组的内存地址都相同让我解释更多我取了三个数组

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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com