¿Cuál es la diferencia principal entre int
, NSInteger
y NSUInteger
en Objective-C?Diferencia entre int, NSInteger y NSUInteger
¿Cuál es mejor usar en una aplicación y por qué?
¿Cuál es la diferencia principal entre int
, NSInteger
y NSUInteger
en Objective-C?Diferencia entre int, NSInteger y NSUInteger
¿Cuál es mejor usar en una aplicación y por qué?
En tales casos es posible que haga clic 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
ok thanx i lo obtuve – Hitarth
fácil y correcto –
La diferencia es para tipos abstractos y sus asociados tamaño del 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 está en menos tan largo como un corto - a (gran desorden).
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 un NSUInteger, simplemente use 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 de "por qué"?
tiene razón. Solo obtenemos la diferencia entre ellos, pero ¿por qué? todavía no estoy consiguiendo, por favor sugiérame – Hitarth
Es la estandarización API. Estos marcos se envían en varias arquitecturas; es bueno que API sea la misma en todos ellos. Al tener estos typedefs, Apple está abstrayendo las diferencias de plataforma de los consumidores API. Si solo habla con la API en términos de estos tipos, entonces (en teoría) no necesita pensar en las diferencias de plataforma al compilar el mismo código para i386, x86_64, ppc, arm7 o lo que sea. Es una abstracción. Se ha dicho que debe usar el más alto nivel de abstracción que hace el trabajo. Entonces, a menos que tengas una razón para NO usar estos tipos, yo digo usarlos. – ipmcc
No existe el nombre 'NSInt'. – BoltClock
NSInteger no NSInt .. – Hitarth
[Ver la documentación] (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html) – Jiri