9

所以基本上我的问题是这样的,我正在使用 uint64_t 对象作为键创建一个 NSMutableDictionary 。

有没有比这样做更好的方法来创建它们?

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

只要您没有将其包含在二进制文件/sockets/NSData 对象/任何内容中,这将起作用。但是有没有更好的方法来做到这一点?我真的很想确保该对象是 64 位的,无论我在哪个平台上运行它。

我想我可以通过始终使用 unsigned long long 来避免整个问题,但是如果我以任何重要数量分配这些对象,这当然会浪费 64 位机器上的大量堆空间......

4

1 回答 1

17

long long在 64 位 OS X/iOS 平台上为 64 位。在所有 OpenStep-descended 平台上,numberWithUnsignedLongLong:对于uint64_t.

上次我检查时,您使用的工厂方法实际上并不会影响所使用的表示形式;它仅取决于数字的值(除非您使用的尺寸太小,导致它被截断)。

更新:这些天,正确答案是NSNumber *bobsNumber = @(bob);

于 2010-09-19T14:26:40.440 回答