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的值。
答案 0 :(得分:3)
NSNumber只是一个包装器,因此当包装的基元类型溢出时它会溢出 因此,如果使用 numberWithInt ,则允许的最大数量为INT_MAX(在limits.h中定义),如果使用 numberWithFloat ,则允许的最大数量为FLOAT_MAX,依此类推。登记/> 所以在这种情况下你不会溢出,我怀疑INT_MAX会如此低。
答案 1 :(得分:1)
<强>概述强>
NSNumber是NSValue的子类,它提供任何C标量的值 (数字)类型。它定义了一组专门用于设置的方法 并将值作为有符号或无符号的char,short int,int, long int,long long int,float或double或BOOL。 (注意 数字对象不一定保留它们的创建类型 用。)它还定义了一个compare:方法来确定排序 两个NSNumber对象。
所以NSNumber
和它所包含的一样大。对于您意想不到的结果,您可以查看@sjs的评论。
答案 2 :(得分:0)
+numberWithInt:
将值解释为signed int。里程永远不会消极,所以我建议使用[NSNumber numberWithUnsignedInt:]
答案 3 :(得分:0)
限制NSNumber
整数可以称为INT_MAX
,但35,000与此无关。问题必须与vehicle
对象或mileage
中的vehicle
属性相关,其中任何一个都可能是nil
因此,请继续使用此条件语句进行记录:
if (!vehicle) {
NSLog(@"Vehicle is nil");
}
else if (!vehicle.mileage) {
NSLog(@"Vehicle's mileage is nil");
}
告诉我你的结果