在一些示例代码中,NSNumber
被添加到可变数组中:
// In the .h, as an instance variable:
NSMutableArray *sequence;
// In the .m file:
sequence = [[NSMutableArray alloc] initWithCapacity:100];
[sequence addObject:[NSNumber numberWithInt:123]];
然后,当需要整数时,它使用:
[(NSNumber *)[sequence objectAtIndex:aCounter] intValue]
我只是想知道为什么需要强制转换(NSNumber *)
?因为即使没有它,程序也可以正常运行。这只是一个好的做法吗?如果是这样,它可以防止发生什么?如果存在一个错误,导致某个元素不是 NSNumber *
,那么对其进行强制转换也会产生奇怪的行为。
最佳答案
转换只会让编译器相信该对象(以 id
类型返回,即没有其他信息的通用对象类型!)实际上是一个 NSNumber
,以便它可以正确识别其 intValue
等方法。它不会使运行时的情况有所不同。如果对象不是 NSNumber,那么无论是否进行强制转换,它都会在运行时崩溃。
关于objective-c - 为什么在检索 intValue 时要转换 NSMutableArray 的 NSNumber 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10379558/