- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我不是很明白(NSInteger)aNumberValue
和[aNumberValue integerValue]
之间的区别,然后做一些测试。例如,这是来自服务器的响应数据:
您可以看到它是一个 int,但值由 NSNumber 保存。我通过编写 NSInteger count = (NSInteger) dic[@"count"];
检索数据,并在 Xcode 调试区域看到了这个:
这确实是一个奇怪的值,但是当我运行 po count
并看到这个时:
无论如何,这个值是正确的,但是另一个奇怪的事情是:
数字2不小于100!
然后我尝试 NSInteger a = [dic[@"count"] integerValue]
并在 Xcode 调试区看到正常值:
和:
所以,我有点困惑,(NSInteger)aNumberValue
和 [aNumberValue integerValue]
之间的区别是什么?
最佳答案
NSNumber
是一个类; NSInteger
只是一个typedef
的 long
, 这是一个原始类型。
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
实际上只是一个 NSInteger
的 402008592
, 它将评估为 false
.
关于ios - 在 objective-c 中进行类型转换,(NSInteger) VS。整数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996374/
在简单类的实现中,我在这一行收到错误“无效接收者类型'NSInteger'”: self.price = p; // this line throws error 我应该将价格指定为c
我正在尝试做一件非常简单的事情,但我不知道怎么做; NSInteger * a=10; a=a-1; NSlog(@"a=%d",a); 由于某种原因,它显示 a=6。 怎么可能? 最佳答案 您的问题
我意识到 for 循环可能是执行此操作的最佳方法,我只是不知道每通过 5 个障碍,将 totalScriptures 整数加 1 的正确方法 我有一个类似于 flappybird 的应用程序。一个对象
我想弄清楚如何在 iOS 上获取两位数的 NSInteger(例如 11)并将其转换为 2 个独立的 NSInteger,每个看起来都像“1”。在 NSInteger 中它总是只有 2 位数字,不多不
我正在尝试编写代码来检测一个整数是否大于另一个整数。这可能吗? 这是我到目前为止所做的事情。 if (NumCorrect >> NumWrong) { btnCool.title = @"A
我正在尝试在我准备加载的 View 上设置一个变量。下面是设置它的代码: NSInteger amountOfQuestions = [self.questions.text intValue];
这看起来是一个非常愚蠢的问题,但我不明白为什么会出现错误。 我有一个实例变量声明为: NSInteger *scopeSelected; 我使用这个变量来跟踪在 UISearchDisplay Con
我的 C++ 知识一塌糊涂。我有 Apple 提供的代码,他们像往常一样提供了不完整的解决方案。 在此代码中,他们提供了两个空的方法 header : - (NSString *)encodeBase
一般我看到的声明常量的代码是这样的: static const NSInteger kNum = 1; static NSString * const kStr = @"A"; 我知道为什么const
我正在尝试使用代码从 NSDictionary 中解析一个整数 [activeItem setData_id:[[NSString stringWithFormat:@"%@", [dict valu
NSInteger 是否占用内存?我们应该在 FOR 循环中使用它吗? 最佳答案 看看Apple文档,NSInteger是这样的: #if __LP64__ || TARGET_OS_EMBEDDED
我正在尝试做一些我认为相对简单的事情并获取本周的当前日期,然后在点击按钮时针对该天进行一些检查。为了获取星期几,我在 viewDidLoad 方法中使用了以下代码: NSDate *today = [
我需要将 NSInteger 的最大值存储到 NSInteger 中?执行此操作的正确语法是什么? 谢谢。 最佳答案 NSInteger 的最大值是 NSIntegerMax . 关于cocoa -
这个问题在这里已经有了答案: When to use NSInteger vs. int (8 个答案) 关闭 8 年前。 在 iPhone 编程中使用 NSInteger 与 int 的原因是什么
我正在我的应用程序中创建一个计数器。我想在发生特定更改时增加它。计数器将其值从 0 增加到 1。然后它会固定为 1,并且不再增加。这是我的代码。在 .h 中我已经做到了这一点。 @interface
当我尝试将 nsinteger 值添加到数组中时,它显示警告, Incompatible pointer to integer conversion sending 'NSInteger *' (ak
我确定我遗漏了一些明显的东西,但我想在 Objective C 中创建一个 NSInteger 指针的实例。 -(NSInteger*) getIntegerPointer{ NSInteger
我正在尝试使用以下代码生成随机负 NSInteger, + (NSInteger)getNegativeRandomNumber { uint32_t random = arc4random_
我想知道16位整数、32位整数和64位整数有什么区别,有符号整数和无符号整数的区别(N整数和整数) 最佳答案 我不确定您所说的“16 位整数”、“32 位整数”和“64 位整数”到底是什么类型,但通常
如何检查 NSInteger 是否有效? NSInteger previousScore = [[self score] integerValue]; if (previousScore !=
我是一名优秀的程序员,十分优秀!