Shizam Shizam - 1 month ago 34
Objective-C Question

When to use NSInteger vs. int

When should I be using

NSInteger
vs. int when developing for iOS? I see in the Apple sample code they use
NSInteger
(or
NSUInteger
) when passing a value as an argument to a function or returning a value from a function.

- (NSInteger)someFunc;...
- (void)someFuncWithInt:(NSInteger)value;...


But within a function they're just using
int
to track a value

for (int i; i < something; i++)
...

int something;
something += somethingElseThatsAnInt;
...


I've read (been told) that
NSInteger
is a safe way to reference an integer in either a 64-bit or 32-bit environment so why use
int
at all?

Answer

You usually want to use NSInteger when you don't know what kind of processor architecture your code might run on, so you may for some reason want the largest possible int type, which on 32 bit systems is just an int, while on a 64-bit system it's a long.

I'd stick with using NSInteger instead of int/long unless you specifically require them.

NSInteger/NSUInteger are defined as *dynamic typedef*s to one of these types, and they are defined like this:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

With regard to the correct format specifier you should use for each of these types, see the String Programming Guide's section on Platform Dependencies