1

NSNumber 允许的最高 int 是多少?我已经在这些论坛的其他地方看到了答案,因此我在这里深感困惑。

int miles = 35000;
vehicle.mileage = [NSNumber numberWithInt:miles];
NSLog(@"int value = %d", miles);
NSLog(@"mileage = %@", vehicle.mileage);

输出是:

int value = 35000
mileage = -30536

我必须在这里错过一些可怕的简单,但是有人可以向我解释为什么这不能正常工作吗?

更新: 进一步查看后,vehicle.mileage 被正确设置为 35000,但是当我通过 NSLog(@"%@", vehicle.mileage) 显示它时,它的输出不正确。当它停止工作时,我还没有找到“神奇”值,因为到目前为止,它适用于高达 ~30,000 的值。

4

4 回答 4

3

NSNumber 只是一个包装器,因此当包装的原始类型溢出时它会溢出。
因此,如果您使用numberWithInt,则允许的最大数量为 INT_MAX(在 limits.h 中定义),如果您使用numberWithFloat,则允许的最大数量为 FLOAT_MAX,依此类推。
所以在这种情况下你不会溢出,我怀疑 INT_MAX 会这么低。

于 2012-12-12T01:00:11.950 回答
1

概述

NSNumber 是 NSValue 的子类,它提供任何 C 标量(数字)类型的值。它定义了一组专门用于将值设置和访问为有符号或无符号 char、short int、int、long int、long long int、float 或 double 或作为 BOOL 的方法。(请注意,number 对象不一定保留创建它们的类型。)它还定义了一个 compare: 方法来确定两个 NSNumber 对象的顺序。

所以NSNumber和它包装的一样大。对于您意想不到的结果,您可以查看@sjs 的问题下方的评论。

于 2012-12-12T01:25:02.120 回答
0

+numberWithInt:将值解释为带符号的 int。里程永远不会是负数,所以我建议使用[NSNumber numberWithUnsignedInt:]

于 2012-12-12T01:11:15.353 回答
0

整数可以具有的极限NSNumber已知为INT_MAX35,但 000 远不及此。问题必须与vehicle对象或 中的mileage属性有关vehicle,它们中的任何一个都可能是nil

因此,继续并使用以下条件语句进行记录:

if (!vehicle) {
 NSLog(@"Vehicle is nil");
}
else if (!vehicle.mileage) {
 NSLog(@"Vehicle's mileage is nil");
}

告诉我你的结果

于 2012-12-12T01:21:01.710 回答