2013-10-03 3 views
1

В Objective-C 2.0 Я присвоение значения свойства NSNumber:Является ли @int сокращенным безопасным в Objective-C?

myObject.myProperty = 5; 

Компилятор говорит мне:

неявное преобразование из 'Int' в 'NSNumber *' отвергается с ARC

Так я думал, что произойдет, если я делаю это:

myObject.myProperty = @5; 

Проверка свойства в отладчике показывает:

_myProperty = (__NSCFNumber *) (int)5 

Это делает компилятор счастливым и ничего плохого не кажется, случается, но я действительно не понимаю, что происходит.

Что именно делает эта стенография, и это безопасно? Что такое NSCFNumber? Я не вижу его в документах.

+0

дубликат [Что это значит, когда вы ставите @ перед целым числом в Objective-C?] (Http://stackoverflow.com/questions/17629874/what-does-it-mean-when-you-put -an-прежде, чем-ан-целое-в-Objective-C) –

ответ

2

NSNumber - это объект, int - это примитивное значение. Вы можете вставить примитив в NSNumber.

Вы можете сделать это, если хотите преобразовать int в поплавок или другой примитивный тип или потому, что вам требуется представление объекта примитивного значения. Некоторые классы, такие как NSDictionary, не позволят вам использовать примитивные значения в качестве их ключей, например.

@ 5 является сокращением для [NSNumber numberWithInt:5], и вы можете узнать больше о literals on NSHipster. Он полностью безопасен и разработан, чтобы сделать ваш код более быстрым и легким для чтения!

NSCFNumber - это класс, который Apple фактически использует для реализации NSNumber за кулисами, как часть того, что известно как кластер классов. На этом этапе вам не нужно беспокоиться об этом.

1

Это не просто безопасно, это правильно. Это не сработает, если это не поддерживается функцией компилятора. Это называется литеральным определением числа. Точно так же, как буквальная строка (@""), словарь (@{}) и массив (@[]).

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

  • Нет связанных вопросов^_^