objective-c - 为什么在检索 intValue 时要转换 NSMutableArray 的 NSNumber 内容?

标签 objective-c types casting nsarray

在一些示例代码中,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/

相关文章:

ios 在导航 Controller 之间传递数据

java - 通过括号转换为字符串会导致 Android 崩溃

go - 组合非类型化和类型化常量时的类型推断

java - Java中float和double的包含范围是多少?

C# LINQ 筛选 IEnumerable<IX> 并表示为 IEnumerable<X :IX>

design-patterns - 对象转换是一个好习惯吗?

ios - 在 UITableView 上添加和保存数据

ios - 强制重新加载页面以反射(reflect)更新的 NSUserDefaults

ios - 设置 subview 比在 viewDidLoad 中更快

spring-mvc - 如何将通用集合类对象作为参数传递