NSInteger является синонимом длинного целого числа. Ниже описывается, как определяется 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 из подписанного или беззнакового символа, short int, int, long int, long long int, float, double или BOOL
Одним из основных отличий является то, что вы можете использовать NSNumber в коллекциях, таких как NSArray, где требуется объект. Например, если вам нужно добавить float в NSArray, вам сначала нужно создать объект NSNumber из float:
float percentage = 40.5;
...
// Создать объект NSNumber, который теперь можно вставить в NSArray
NSNumber *percentageObject = [NSNumber numberWithFloat:percentage];