2013-12-19 90 views
1

我並不期待NSString上的哈希值根據目標設備的不同而不同。爲什麼[NSString hash]設備依賴於?

NSLog(@"%lu", (unsigned long)[@"test" hash]); 
// 38178019076 on my iPad. 
// 3818280708 on my iPhone and (iPhone/iPad-)Simulator. 

除此之外,在NSString的哈希應小心(hash is bad with NSString)中使用的事實,這個問題可以很容易地使用一個真正的散列(例如SHA),我很感興趣,爲什麼不同的結果返回來解決?

+2

也許你有一個32位的iPad和一個64位的模擬器(= Mac)......? – 2013-12-19 20:13:15

回答

5

NSObject協議hash方法返回一個NSUInteger。基於設備架構(32或64位),NSUInteger是不同類型的。對於64位設備而不是32位設備(使用額外的空間來製作更精確的哈希),哈希實現可能不同。

+0

謝謝。我的設置是iPad Air(64位),iPhone 5(32位),我只是在32位模擬器上進行了測試。因此還有一個理由謹慎使用該功能。 – Masa