Reb*_*ial 22 iphone objective-c
为什么这不喜欢编译器,而铸造应该像在c中一样工作,我可以在这里阅读如何在Objective-C中转换对象
[p setAge:(NSNumber*)10];
Run Code Online (Sandbox Code Playgroud)
哪里
- (NSNumber*) age {
return _age;
}
- (void) setAge: (NSNumber*)input {
[_age autorelease];
_age = [input retain];
}
Run Code Online (Sandbox Code Playgroud)
wal*_*lky 50
与您之前的问题形成对称,NSNumber是一种对象类型.您需要通过方法调用来创建它,例如:
[p setAge:[NSNumber numberWithInt:10]];
Run Code Online (Sandbox Code Playgroud)
您当前的代码只是尝试将任意整数强制10转换为指针.永远不要这样做:如果编译器没有警告你,那么你会尝试在内存位置访问一些完全不合适的字节,10就像它们是一个NSNumber对象一样,它们不会.做那些事会导致眼泪.
哦,只是为了抢占下一个明显的问题,请记住,如果你想在一个NSNumber对象中使用该值,你需要通过方法调用得到它,例如:
if ( [[p age] intValue] < 18 )
...
Run Code Online (Sandbox Code Playgroud)
(NSNumber是不可变的,我认为它的实现使得相同的值被映射到同一个对象.因此,可能可以通过直接指针比较来避免NSNumber对象之间的值相等.但请不要,因为那将是一个不恰当地依赖于实现细节.请isEqual改用.)
Max*_*sca 29
今天也可以使用简写符号来做到这一点:
[p setAge:@(10)];
Run Code Online (Sandbox Code Playgroud)
用这个:
[p setAge:[NSNumber numberWithInt:10]];
Run Code Online (Sandbox Code Playgroud)
你不能将整数文字强制10转换为NSNumber*(指向NSNumber).
NSNumber *yourNumber = [NSNumber numberWithInt:your_int_variable];
Run Code Online (Sandbox Code Playgroud)
因为NSNumber是一个对象,并且原始整数类型中的“ 10”与Java中int和Integer之间的区别非常相似。因此,您需要调用其初始化程序:
[p setAge:[NSNumber numberWithInt:10]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
36836 次 |
| 最近记录: |