Question

Je crée un masque de bits pour iOS en utilisant le type de données int32_t.Ceci est ensuite défini sur une variable qui accepte un NSInteger.Cela ne génère aucune erreur de compilation comme prévu, mais je me demandais : existe-t-il un moyen pour que cela puisse provoquer des erreurs d'exécution à l'avenir ?

Était-ce utile?

La solution

En général, cela fonctionnera.NSInteger aura toujours une longueur d'au moins 32 bits.S'il est de 64 bits, votre numéro sera étendu pour correspondre (vous devrez peut-être le convertir).Cela ne provoquera pas d’erreurs d’exécution.


Informations détaillées sur NSInteger

NSInteger est défini à l'aide du code suivant (de NSObjCRuntime.h) :

#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

Cela signifie que NSInteger est équivalent à long lors de la compilation pour 64 bits, un système d'exploitation intégré, iPhone, Windows ou lors de la construction de 32 bits comme 64 bits.Sinon, cela équivaut à int.Depuis int et int32_t sont équivalents, tout ira bien dans les applications 32 bits sous OS X.Pour les autres situations, cela dépend de la taille de long.

Dans les applications OS X 64 bits, long est un nombre de 64 bits.Sur l'iPhone, long est un nombre de 32 bits.Je ne connais pas Windows et je ne sais pas s'il utilise le format 32 bits ou 64 bits lors de la construction de 32 bits comme 64 bits.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top