【发布时间】:2012-02-17 00:45:14
【问题描述】:
当我使用此语句将数组元素转换为整数时
int test=(int)[myArray objectAtIndex:2];
稍后使用“test”传递给其他命令失败。但是,此语句有效
int test=[[myArray objectAtIndex2]intValue];
这两种转换有什么区别?
【问题讨论】:
标签: objective-c nsarray
当我使用此语句将数组元素转换为整数时
int test=(int)[myArray objectAtIndex:2];
稍后使用“test”传递给其他命令失败。但是,此语句有效
int test=[[myArray objectAtIndex2]intValue];
这两种转换有什么区别?
【问题讨论】:
标签: objective-c nsarray
第一个是演员表。您正在获取对象并将其转换为一个 int,这将为您提供一个包含对象地址的 int(在 64 位下,它将仅包含地址的低 32 位)。这根本不是你想要的。
第二种是对-intValue的方法调用,由NSNumber(和NSString)实现,返回NSNumber(或NSString)对象所代表的int。这(大概)是你真正想要的。
【讨论】:
第一个语句不是转换。它是存储为数组中元素 2 的指针的转换。该语句只是将该指针的值(转换为int)分配给变量。
第二个语句是一个转换。它在存储在该索引 2 处的指针指向的对象上调用 -intValue(可能是 NSNumber 实例)。
【讨论】:
- intValue 适用于 NSString * 和 NSNumber * 类型的对象。
如果您的对象实际上是@"123",或[NSNumber numberWithInt:123] 而不仅仅是int 123,那么使用- intValue 会将其转换为123。如果您尝试使用(int) 直接转换它并且它是上述两种类型之一,那么您将遇到以int 访问它的错误(因为它不是,它是一种更复杂的类型)。
【讨论】: