Quindi essenzialmente la mia domanda è questa, sto creando un NSMutableDictionary usando gli oggetti uint64_t come chiave.Conversione (u) int64_t a NSNumeri
C'è un modo migliore per crearli rispetto a questo?
uint64_t bob=7;
NSNumber *bobsNumber;
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
bobsNumber=[NSNumber numberWithUnsignedLong:bob];
#else
bobsNumber=[NSNumber numberWithUnsignedLongLong:bob];
#endif
Questo potrebbe funzionare finché non ha incluso in un file/prese/NSData oggetto binario/qualunque cosa. Ma c'è un modo migliore per farlo? Mi piacerebbe davvero essere sicuro che l'oggetto sia a 64-bit indipendentemente dalla piattaforma su cui lo eseguo.
Credo che avrei potuto solo evitare tutto il problema andando sempre unsigned long lunga ma, naturalmente, che i rifiuti di tonnellate di spazio di heap su 64 macchine bit se assegnare questi oggetti in qualsiasi numero significativo ....
Il motivo per cui non ha importanza è che il compilatore conosce meglio le effettive larghezze di bit dei tipi utilizzati. Se non corrispondono, uno viene convertito nell'altro - tagliando i bit o estendendoli con gli 0 iniziali. –
Stai fraintendendo. Quello che intendo nel secondo paragrafo è che '[NSNumber numberWithLongLong: 73]' produrrebbe lo stesso oggetto di '[NSNumber numberWithChar: 73]', piuttosto che uno che produce un oggetto con un 'long long' e l'altro un oggetto supportato da un 'char'. Ora che mi preoccupo di ricontrollare, questo non è il caso in 10.6.4. (Puoi controllare con 'CFShow()', che ti dice la rappresentazione interna.) –