Objective C将数字转换为NSNumber

时间:2010-12-05 13:17:24

标签: iphone objective-c

为什么这不会令编译器满意,而转换应该像c一样工作,因为我可以在这里阅读How to cast an object in Objective-C

[p setAge:(NSNumber*)10];

,其中

- (NSNumber*) age {
    return _age;
}
- (void) setAge: (NSNumber*)input {
    [_age autorelease];
    _age = [input retain];
}

5 个答案:

答案 0 :(得分:49)

earlier question形成对称,NSNumber是对象类型。您需要通过方法调用来创建它,例如:

[p setAge:[NSNumber numberWithInt:10]];

您当前的代码只是尝试将任意整数10强制转换为指针从不执行此操作:如果编译器没有警告您,那么您将尝试在内存位置10访问一些完全不合适的字节,就像它们是{{1}一样对象,他们不会。做那些事会导致眼泪。

哦,只是为了抢占下一个明显的问题,请记住,如果你想在NSNumber对象中使用该值,你需要通过方法调用来实现,例如:

NSNumber

if ( [[p age] intValue] < 18 ) ... 是不可变的,我认为它的实现使得相同的值被映射到同一个对象。所以它可能可能得到远离指针比较NSNumber对象之间的值相等。但是请不要,因为这将不恰当地依赖于实现细节。请改用NSNumber。)

答案 1 :(得分:26)

今天也可以使用简写表示法来实现:

[p setAge:@(10)];

答案 2 :(得分:6)

使用此:

[p setAge:[NSNumber numberWithInt:10]];

您无法将10之类的整数文字强制转换为NSNumber*(指向NSNumber的指针)。

答案 3 :(得分:4)

因为NSNumber是一个对象,而原始整数类型中的“10”,很像Java中int和Integer之间的区别。因此,您需要调用其初始化程序:

[p setAge:[NSNumber numberWithInt:10]

答案 4 :(得分:4)

NSNumber *yourNumber = [NSNumber numberWithInt:your_int_variable];