gpt4 book ai didi

ios - 在 objective-c 中进行类型转换,(NSInteger) VS。整数值

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:26 25 4
gpt4 key购买 nike

我不是很明白(NSInteger)aNumberValue[aNumberValue integerValue]之间的区别,然后做一些测试。例如,这是来自服务器的响应数据:

enter image description here

您可以看到它是一个 int,但值由 NSNumber 保存。我通过编写 NSInteger count = (NSInteger) dic[@"count"]; 检索数据,并在 Xcode 调试区域看到了这个:

enter image description here

这确实是一个奇怪的值,但是当我运行 po count 并看到这个时:

enter image description here

无论如何,这个值是正确的,但是另一个奇怪的事情是:

enter image description here

数字2不小于100!

然后我尝试 NSInteger a = [dic[@"count"] integerValue] 并在 Xcode 调试区看到正常值:

enter image description here

和:

enter image description here

所以,我有点困惑,(NSInteger)aNumberValue[aNumberValue integerValue] 之间的区别是什么?

最佳答案

NSNumber是一个类; NSInteger只是一个typedeflong , 这是一个原始类型。

dic[@"count"]是一个指针,表示dic[@"count"]持有指向 NSNumber 的地址实例。 NSNumber有一个方法叫做 integerValue返回 NSInteger作为 NSNumber 的基础值(value)实例代表。所以你可以得出结论 [dic[@"count"] integerValue]给你一个long ,这就是您从 NSNumber 中检索值的方式.

您没有检索 NSNumber 的值通过将其转换为 NSInteger .那是因为dic[@"count"] ,正如我所说,是一个指针。所以通过写

NSInteger count = (NSInteger) dic[@"count"];

您实际上是在将指针自身 转换为NSInteger ,与实际表示值无关。值402008592你看到的只是指针值的十进制表示,它是一个地址。

命令po用于打印对象,所以lldb实际上会尝试打印地址为count的对象。 .这就是为什么你得到 2返回使用 po .你可以试试p count你会得到402008592 .

关于po count < 100 : 表达式 (count < 100)首先被评估;自 count实际上只是一个 NSInteger402008592 , 它将评估为 false .

关于ios - 在 objective-c 中进行类型转换,(NSInteger) VS。整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996374/

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