2012-03-26 7 views
0

NSUIntegerを返すと想定されるクラスに対して-hashメソッドを実装しています。符号なし整数が予想されるときに符号なしlongを返すことの妥当性

- (NSUInteger) hash { 
    return CFHash(self->cfObj); 
} 

さて、私の知る限りNSUIntegerunsigned long OR unsigned intのいずれかである承知しているようtypedefunsigned longですが、これは、CFHashCodeを返しCFHash:それは次のようなことを行ったための私の実装。

アプリケーションがunsigned intを予期したときにunsigned longを返すと、どのような問題に遭遇できますか?

+0

ハッシュの衝突があっても問題は起こりませんが、正しく処理されるはずです。 – Felix

答えて

3

あなたはどのプラットフォームをコンパイルしていますか?あなたが指摘したように、NSUIntegerは、アーキテクチャが32ビットか64ビットかに応じて、符号なしlongまたはunsigned intのいずれかです。 64ビットOS Xアプリケーションでは、これは明らかです。

iOSや32ビットOS Xアプリケーションでも安全であるはずです。

An integer of type CFHashCode that represents a hashing value for cf. 
説得力のある理由はありません

、しかしdefault implementation of hash apparently uses CFHash anywaydocsCFHashの戻り値の型を記述します。

+0

私はios用にコンパイルしていますが、これが32ビットか64ビットかはわかりません。私の主な心配は、長いことを返すと32ビットシステムで何らかのオーバーフローが発生するということでしたが、あなたの答えから、これは私が心配しなければならないものではありませんか? –

+0

あなたはうまくいくはずです--iOSは32ビットですが、整数で 'CFHash'を使って衝突を起こすべきではありません。 –

関連する問題