Если вы объявляете свое целое число как NSInteger или примитив int в стиле C, то то, что вы говорите, верно. Но нет, если вы используете класс NSNumber. Позвольте мне объяснить:
NSInteger не является классом Objective-C. Это не более чем синоним целого числа. NSInteger определяется следующим образом:
#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
NSNumber - это класс Objective-C и подкласс NSValue. Можно создать объект NSNumber из знака или без знака char, short int, int, long int, long long int, float, double или BOOL.
Среди них NSNumber может использоваться только в коллекциях, таких как NSArray, где требуется объект, но NSInteger не может использоваться там напрямую.