If you declare your integer as an 'NSInteger' or a C-style primitive int, then what you say is true. But not if you are using the NSNumber class. Let me explain:
NSInteger is not an Objective-C class.It is nothing more than a synonym for an integer. NSInteger is defined like this:
#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif
NSNumber is an Objective-C class, and a subclass of NSValue. It is possible to create a NSNumber object from a signed or unsigned char, short int, int, long int, long long int, float, double or BOOL.
Among the two, NSNumber can only be used in collections, such as NSArray, where an object is required, but NSInteger cannot be used there directly.