Tak więc w zasadzie moje pytanie jest takie, że tworzę obiekt NSMutableDictionary przy użyciu obiektów uint64_t jako klucza.Konwertowanie (u) int64_t na NSNumbers
Czy istnieje lepszy sposób ich tworzenia niż wykonanie tego?
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
to będzie działać tak długo, jak nie obejmują go w binarnym pliku/gniazd/NSData obiektu/cokolwiek. Ale czy istnieje lepszy sposób na zrobienie tego? Naprawdę chciałbym mieć pewność, że obiekt jest 64-bitowy niezależnie od platformy, na której go uruchomiłem.
Chyba mogę tylko uniknąć cały problem, zawsze będzie unsigned long long, ale oczywiście, że odpady mnóstwo przestrzeni sterty na 64-bitowych maszynach gdybym przeznaczyć te obiekty znaczących liczb ....
Powodem, dla którego nie ma znaczenia, jest to, że kompilator wie najlepiej o rzeczywistych bitach używanych typów. Jeśli się nie zgadzają, jeden jest konwertowany na drugi - albo przez przycinanie bitów, albo przez rozszerzanie z wiodącymi zerami. –
Nieporozumienie. W drugim akapicie mam na myśli to, że '[NSNumer numberWithLongLong: 73]' wytworzyłby ten sam obiekt, co '[NSNumber numberWithChar: 73]', zamiast jednego odtwarzającego obiekt z powrotem przez 'long long' i drugi obiekt wspierane przez 'char'. Teraz, gdy próbuję ponownie sprawdzić, nie jest tak w 10.6.4. (Możesz to sprawdzić za pomocą 'CFShow()', która mówi ci o wewnętrznej reprezentacji.) –