iphone objective-c int nsinteger nsuinteger

iphone - Diferencia entre int, NSInteger y NSUInteger



objective-c (2)

¿Cuál es la principal diferencia entre int , NSInteger y NSUInteger en Objective-C?

¿Cuál es mejor usar en una aplicación y por qué?


En tales casos, puede hacer clic con el botón derecho e ir a la definición:

#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


La diferencia es para los tipos abstractos y sus asociados de hardware. De manera que ahora no tenemos que preocuparnos por qué tamaño tiene una int o qué tan grande es su puntero en un hardware en particular.

"C" es malo en esto, solo indica que un largo es al menos tan grande como un int, que un int es el tamaño entero "natural" del hardware (lo que sea que eso signifique), que un int es al menos tan largo como un corto - un (gran lío).

Parecía una buena idea en ese momento venir de Fortran, pero no envejeció bien.

Uno podría usar las definiciones POSIX, cosas como uint32_t, int16_t, etc. Pero esto no aborda qué tan grande debe ser un puntero en un hardware en particular.

Por lo tanto, si Apple define el tipo de devolución como NSUInteger, solo debe usar eso y no necesita saber si tiene un tamaño de 16, 32 o 64 bits para su hardware en particular. (Elegí esos valores fuera del aire solo por un ejemplo).

Como puede ver en @Bastian, el tamaño real depende del hardware.

La documentación responde a la "letra de la pregunta" pero no proporciona una comprensión del "por qué".