2010-12-05 38 views

回答

39

在某种对称性与earlier questionNSNumber是对象类型。你需要通过一个方法调用来创建它,如:

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

您当前的代码试图简单地在任意整数10转换为指针从来没有这样做:如果编译器没有警告你,你会试图访问一些完全不合适的字节在内存位置10就好像它们是一个NSNumber对象,他们不会。做这些东西会导致流泪。

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

if ([[p age] intValue] < 18) 
    ... 

NSNumber是不可改变的,而且我觉得实现,使得相同的值映射到相同的对象,所以它可能是可能逃脱为NSNumber对象之间的值相等指针直接比较,但请不要,因为这将不适当地依赖实现细节。使用isEqual代替)

+1

感谢您期待下一期:) – 2010-12-05 13:42:34

6

使用此:

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

您不能将像10这样的整数文字转换为NSNumber*(指向NSNumber的指针)。

+0

感谢你能也说不清为什么,因为铸造应该在C喜欢的工作,我可以在这里阅读http://stackoverflow.com/questions/690748/how-to-cast-an-object-in-objective-c – 2010-12-05 13:22:12

+0

只能在10分钟内接受答案stackoverflow说:) – 2010-12-05 13:22:42

4

因为NSNumber是原始整数类型中的对象和“10”,非常类似于Java中int和Integer之间的区别。因此,您需要调用它的初始化器:

[p setAge:[NSNumber numberWithInt:10] 
4
NSNumber *yourNumber = [NSNumber numberWithInt:your_int_variable]; 
22

今天,它也可以使用速记符号它做的事:

[p setAge:@(10)];