Почему одно преобразование элемента массива в целое число работает, а другой теперь работает? - PullRequest
0 голосов
/ 17 февраля 2012

Когда я преобразую элемент массива в целое число, используя этот оператор

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

позднее использование «test», передаваемого другим командам, завершается неудачей. Однако этот оператор работает

int test=[[myArray objectAtIndex2]intValue];

В чем разница между этими двумя типами конверсии?

Ответы [ 3 ]

2 голосов
/ 17 февраля 2012

Первый актерский состав.Вы берете объект и приводите его к типу int, который даст вам int, содержащий адрес объекта (а в 64-битном он будет содержать только младшие 32 бита адреса).Это совсем не то, что вы хотите.

Второй - это вызов метода для -intValue, который реализуется NSNumberNSString) для возврата int, который NSNumber (или NSString) объект представляет.Это (предположительно) то, что вы на самом деле хотите.

0 голосов
/ 17 февраля 2012

- intValue работает на объектах типа NSString * и NSNumber *.

Если ваш объект на самом деле @"123" или [NSNumber numberWithInt:123] вместо просто int 123, то использование - intValue преобразует его в 123. Если вы попытаетесь привести его напрямую, используя (int), и это один из двух вышеупомянутых типов, вы столкнетесь с ошибками, получая доступ к нему как int (потому что это не так, это более сложный тип).

0 голосов
/ 17 февраля 2012

Первое утверждение не является преобразованием. Это приведение указателя, хранящегося как элемент 2 в вашем массиве. Оператор просто присваивает значение этого указателя (приведенное к int) переменной.

Второе утверждение - разговор. Он вызывает -intValue для объекта, на который указывает указатель, хранящийся в этом индексе 2 (возможно, экземпляр NSNumber).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...