Así que, esencialmente, mi pregunta es la siguiente: estoy creando un NSMutableDictionary utilizando objetos uint64_t como clave.Conversión (u) int64_t en NSNumbers
¿Hay alguna forma mejor de crearlos que haciendo esto?
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
Esto funcionaría, siempre y cuando no la incluyó en un archivo/hembra/NSData objeto binario/lo que sea. Pero, ¿hay alguna forma mejor de hacer esto? Realmente me gustaría estar seguro de que el objeto sea de 64 bits, independientemente de la plataforma en la que lo ejecute.
Creo que sólo podía evitar todo el problema siempre va unsigned long long pero por supuesto que los desechos toneladas de espacio de almacenamiento dinámico en máquinas de 64 bits si asignar estos objetos en un número significativo ....
La razón por la que no importa es que el compilador conoce mejor los anchos de bit reales de los tipos utilizados. Si no coinciden, uno se convierte en el otro, ya sea recortando bits o extendiéndose con los primeros 0. –
Estás malentendido. Lo que quiero decir en el segundo párrafo es que '[NSNumber numberWithLongLong: 73]' produciría el mismo objeto que '[NSNumber numberWithChar: 73]', en lugar de uno que produce un objeto con un 'long long' y el otro un objeto respaldado por un 'char'. Ahora que me molesto en volver a verificar, este no es el caso en 10.6.4. (Puede verificar esto con 'CFShow()', que le indica la representación interna). –