2014-02-15 3 views
0

Я столкнулся с проблемой с NSNumber странную, Когда я запускаю следующий код,NSNumber объект типа длинной

NSNumber *num = [NSNumber numberWithLong:1000]; 
const char* type =[num objCType]; 
if (strcmp (type, @encode (long)) == 0) { 
    NSLog(@"Type is long"); 
}else if(strcmp (type, @encode (int)) == 0){ 
     NSLog(@"Type is int"); 
} 

Выход:

Тип является ИНТ

Редактировать: Я попробовал [NSNumber numberWithLong:1000L] и [NSNumber numberWithLong:1000000000]

Но все тот же выход.

Почему тип int здесь?

+0

Попробуйте '[номер NSNumberWithLong: 1000L];' – Wain

+0

@Wain: все же выход такой же. – Karthik207

+2

Что вы на самом деле пытаетесь достичь? – Wain

ответ

3

Ответ прост ... documentation для objCType говорит:

Особых соображения

Возвращаемый тип не обязательно совпадает с методом приемник был создан с.

0

Это как запрос метода stringWithInt, чтобы вернуть строку, которая все еще знает, что это int. Вы создаете NSNumber, вы получаете NSNumber.

+0

Как типы хранятся внутри? Когда мы говорим, что он длинный, но на самом деле он хранится как int.Почему это происходит. «Пока я не понимаю. – Karthik207

+0

NSNumber - это подкласс NSValue, который предлагает значение как любой C-скалярный (числовой) тип. То, что вы передаете в конструктор, не отражает скалярный тип, который он внутренне представляет значение как – davbryn

Смежные вопросы