2012-03-26 83 views
0

我正在對類應用-hash方法,該類應該返回NSUInteger。我爲它的實施將是與此類似:預期無符號int時返回unsigned long的後果

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

CFHash返回CFHashCode,這是一個typedefunsigned long,但據我所知的NSUInteger或者是一個unsigned longunsigned int

如果我在返回unsigned long時應用程序期望unsigned int可以遇到什麼樣的問題?

+0

我認爲即使有散列衝突,也不會有任何問題,應該正確處理。 – Felix 2012-03-26 11:59:46

回答

3

你在編譯什麼平臺?正如您所指出的,NSUInteger是一個無符號長符號或無符號整數,具體取決於您的體系結構是32位還是64位。對於64位OS X應用程序,這顯然很好。

我認爲即使在iOS或32位OS X應用程序中,您也應該是安全的。該docs描述CFHash返回類型:

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

這不是一個令人信服的理由,但default implementation of hash apparently uses CFHash anyway

+0

我正在編譯ios,但我不確定這是32位還是64位。我主要擔心的是,返回long會在32位系統上導致某種溢出,但從您的回答中,這不是我必須擔心的事情? – 2012-03-26 15:42:58

+0

你應該沒問題 - iOS是32位的,但不應該使用帶有整數的CFHash來進行碰撞。 – 2012-03-26 21:41:21

相關問題