【问题标题】:Why is [NSString hash] device dependent?为什么 [NSString hash] 设备依赖?
【发布时间】:2013-12-19 20:04:42
【问题描述】:

我没想到 NSString 上的哈希会根据目标设备返回不同的结果。

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) 可以轻松解决这个问题之外,我很感兴趣为什么会返回不同的结果?

【问题讨论】:

  • 也许你有一个 32 位 iPad 和一个 64 位模拟器 (=Mac)...?

标签: ios objective-c hash nsstring


【解决方案1】:

NSObject 协议hash 方法返回一个 NSUInteger。 NSUInteger 是基于设备架构(32 位或 64 位)的不同类型。 64 位设备与 32 位设备的哈希实现可能不同(使用额外的空间来制作更准确的哈希)。

【讨论】:

  • 谢谢。我的设置是 iPad Air(64 位)、iPhone 5(32 位),我刚刚在 32 位模拟器上对其进行了测试。所以还有一个理由要小心使用该功能......
猜你喜欢
  • 2010-12-15
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2018-04-10
  • 2016-05-05
  • 1970-01-01
  • 2015-11-15
  • 1970-01-01
相关资源
最近更新 更多