gpt4 book ai didi

iOS 使用 (int) 转换 NSDictionary 中的值失败

转载 作者:行者123 更新时间:2023-11-29 02:14:01 25 4
gpt4 key购买 nike

我有一个 NSDictionary 包含 2 个键/值对:

NSDictionary *dic = @{@"tag":@2,                //NSNumber
@"string":@"someString"}; //NSString

NSLog(@"%i",(int)[dic objectForKey:@"tag"]); //print out 34
NSLog(@"%i",[dic objectForKey:@"tag"] intValue]); //print out 2

为什么“使用 (int)id 值转换为 int”会得到错误的结果,但不是相反?他们的转化水平不同吗?

最佳答案

Why does "converting id value to int with (int)"get me the wrong result but not the other way? are they in different levels of conversion?

id 是指针类型。 id 指针指向内存中的 Objective-C 对象。通过将 id 转换为 (int),您只是将指针的(部分)位模式重新解释为 int,这是毫无意义的。如果您想可靠地从 Objective-C 对象中获取原始值,则必须调用 NSStringNSNumber 的正确转换方法。

如果在使用 NSNumber 进行指针转换的情况下,您似乎得到了 2 的“正确”值,那么 可能是因为 Objective-C 运行时使用了一种称为 tagged pointers 的优化技术。 ,因此并没有真正创建和分配小对象,而是将它们的语义(NSNumber 对象存储的数字位)填充到指针的未使用位中。

关于iOS 使用 (int) 转换 NSDictionary 中的值失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28960439/

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