2011-10-02 29 views
36

¿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é?

+0

No existe el nombre 'NSInt'. – BoltClock

+0

NSInteger no NSInt .. – Hitarth

+2

[Ver la documentación] (http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_DataTypes/Reference/reference.html) – Jiri

Respuesta

29

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 
+0

ok thanx i lo obtuve – Hitarth

+0

fácil y correcto –

20

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é"?

+0

tiene razón. Solo obtenemos la diferencia entre ellos, pero ¿por qué? todavía no estoy consiguiendo, por favor sugiérame – Hitarth

+3

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

Cuestiones relacionadas