Должен ли я использовать NSNumber вместо основных типов чисел C?

В чем преимущество использования NSNumber из Foundation Framework вместо базовых типов C (int, float, double)?

Использование NSNumber:

NSNumber *intNumber;
NSInteger myInt;
intNumber = [NSNumber numberWithInteger: 100];
myInt = [intNumber integerValue];

Использование чистого C:

int intNumber;
intNumber = 100;

Кажется, намного проще и экономичнее использовать C.

Я знаю, что NSNumber — это тип объекта (или класса?), но зачем мне использовать их вместо простых переменных C? Когда я должен их использовать?


person Fábio Perez    schedule 18.02.2011    source источник


Ответы (3)


Назначение NSNumber состоит в том, чтобы просто упаковать примитивные типы в объекты (типы указателей), чтобы вы могли использовать их в ситуациях, когда для работы требуются значения типа указателя.

Один распространенный пример: вам нужно использовать NSNumber, если вы хотите сохранить числовые значения в объектах Core Data.

Вы можете и должны использовать примитивы для вычислений (за исключением десятичных дробей, в этом случае вы используете NSDecimal или NSDecimalNumber).

person BoltClock    schedule 18.02.2011
comment
+1 Также классы коллекций Foundation принимают только объекты, а не примитивы. - person Mark Adams; 18.02.2011

Если вам нужно передать число как объект, используйте NSNumber.

Если вам нужно произвести арифметические операции, вы можете использовать int и double. Если вы не хотите возиться с 32/64-битными проблемами, вы можете использовать NSInteger и CGFloat.

person mouviciel    schedule 18.02.2011

Потому что при работе с передачей параметров с определенными объектами использование базового типа данных не сработает. Кроме того, класс NSNumber предоставляет возможности для быстрого преобразования значений в другие типы данных.

person PurpleOak    schedule 18.02.2011