【问题标题】:Why does one conversion of an array element to an integer work and the other now work?为什么数组元素到整数的一种转换有效,而另一种现在有效?
【发布时间】:2012-02-17 00:45:14
【问题描述】:

当我使用此语句将数组元素转换为整数时

int test=(int)[myArray objectAtIndex:2];

稍后使用“test”传递给其他命令失败。但是,此语句有效

int test=[[myArray objectAtIndex2]intValue];

这两种转换有什么区别?

【问题讨论】:

    标签: objective-c nsarray


    【解决方案1】:

    第一个是演员表。您正在获取对象并将其转换为一个 int,这将为您提供一个包含对象地址的 int(在 64 位下,它将仅包含地址的低 32 位)。这根本不是你想要的。

    第二种是对-intValue的方法调用,由NSNumber(和NSString)实现,返回NSNumber(或NSString)对象所代表的int。这(大概)是你真正想要的。

    【讨论】:

      【解决方案2】:

      第一个语句不是转换。它是存储为数组中元素 2 的指针的转换。该语句只是将该指针的值(转换为int)分配给变量。

      第二个语句是一个转换。它在存储在该索引 2 处的指针指向的对象上调用 -intValue(可能是 NSNumber 实例)。

      【讨论】:

        【解决方案3】:

        - intValue 适用于 NSString * 和 NSNumber * 类型的对象。

        如果您的对象实际上是@"123",或[NSNumber numberWithInt:123] 而不仅仅是int 123,那么使用- intValue 会将其转换为123。如果您尝试使用(int) 直接转换它并且它是上述两种类型之一,那么您将遇到以int 访问它的错误(因为它不是,它是一种更复杂的类型)。

        【讨论】:

          猜你喜欢
          • 2014-02-04
          • 2015-10-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-25
          • 1970-01-01
          相关资源
          最近更新 更多