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

これは、バイナリファイル/ソケット/NSDataオブジェクトなどに含めない限り機能します。しかし、これを行うためのより良い方法はありますか?実行しているプラ​​ットフォームに関係なく、オブジェクトが64ビットであることを確認したいと思います。

常にunsignedlonglongを実行することで、問題全体を回避できると思いますが、もちろん、これらのオブジェクトをかなりの数で割り当てると、64ビットマシンで大量のヒープスペースが無駄になります。

4

1 に答える 1

17

long long64ビットOSX/iOSプラットフォームでは64ビットです。すべてのOpenStep-descendedプラットフォームで、numberWithUnsignedLongLong:は正しいですuint64_t

前回チェックしたとき、使用するファクトリメソッドは実際には使用される表現に影響しません。数値の値にのみ依存します(サイズが小さすぎて切り捨てられない限り)。

更新:最近、正解はNSNumber *bobsNumber = @(bob);です。

于 2010-09-19T14:26:40.440 に答える