为什么这不能让编译器满意呢?类型转换应该像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];
}发布于 2010-12-05 21:23:46
在earlier question的某种对称性中,NSNumber是一种对象类型。您需要通过方法调用来创建它,例如:
[p setAge:[NSNumber numberWithInt:10]];您当前的代码只是尝试将任意整数10转换为指针。永远不会这样做:如果编译器没有警告您,那么您就会试图访问内存位置10中的一些完全不合适的字节,就好像它们是一个NSNumber对象一样,而实际上它们不是。这样做会让人流泪。
哦,为了避免下一个明显的问题,记住如果你想在NSNumber对象中使用这个值,你也需要通过方法调用来达到这个目的,例如:
if ( [[p age] intValue] < 18 )
...(NSNumber是不可变的,我认为它的实现方式是将相同的值映射到相同的对象。因此,对于NSNumber对象之间的值相等,可以不进行直接指针比较。但是请不要使用,因为这将是对实现细节的不适当依赖。请改用isEqual。)
发布于 2014-02-02 18:35:27
今天,使用速记符号也可以做到这一点:
[p setAge:@(10)];发布于 2010-12-05 21:18:29
使用以下命令:
[p setAge:[NSNumber numberWithInt:10]];你不能把像10这样的整数转换成一个NSNumber* (指向NSNumber的指针)。
https://stackoverflow.com/questions/4358987
复制相似问题