0

-hashを返すはずのクラスにメソッドを実装していNSUIntegerます。私の実装は次のようになります。

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

これはCFHashedですが、私が知る限り、 anはOR anです。 CFHashCodetypedefunsigned longNSUIntegerunsigned longunsigned int

unsigned longアプリケーションが を期待しているときに を返すと、どのような問題が発生する可能性がありunsigned intますか?

4

1 に答える 1

3

どのプラットフォーム用にコンパイルしていますか? ご指摘のとおりNSUInteger、アーキテクチャが 32 ビットか 64 ビットかに応じて、an は unsigned long または unsigned int のいずれかになります。64 ビット OS X アプリの場合、これは明らかに問題ありません。

iOS や 32 ビット OS X アプリでも安全なはずです。ドキュメントでは、次の戻り値の型について説明していますCFHash

An integer of type CFHashCode that represents a hashing value for cf.

それは説得力のある理由ではありませんが、明らかにのデフォルトの実装はとにかくhashCFHashを使用しています。

于 2012-03-26T11:58:10.887 に答える