gpt4 book ai didi

objective-c - 'hash'方法在Objective-C中做什么

转载 作者:太空狗 更新时间:2023-10-30 03:42:26 25 4
gpt4 key购买 nike

有时,当我查看对象响应的选择器列表时,我会看到 hash 出现。有一段时间,我一直想知道这是什么意思,但我一直没有回过神来找出答案。

如果您能告诉我选择器的作用以及这样做的常见用途,我将不胜感激。

最佳答案

它计算对象的哈希值,这在哈希表中特别有用,例如当对象用作 NSDictionary 的键时。

对象 hash 必须具有以下属性:

  • 被视为相等的同一类的两个对象应返回相同的散列
  • 具有不同散列值的两个对象永远不会被视为相等
  • 具有相同散列值的两个对象不一定彼此相等;无论如何,哈希值越独特,NSDictionary 查找的性能就越好。
  • If 也应该尽快计算以避免字典中的性能问题

欲了解更多信息,read the NSObject Protocol documentation定义此 hash 方法的位置。


例如,字符串的 hash 函数可以是该字符串的字符数,或其字符的 ascii 码的总和,或任何类似的东西。

当您在 NSDictionary 中搜索给定键时,一种解决方案是将搜索到的键与字典中的所有其他键进行比较,这需要遍历所有键并调用 isEqual 在每个键上,如果字典有很多条目,这将花费很长时间。因此,Cocoa 将计算搜索到的键的哈希值,并将其与字典中键的所有(预先计算的)哈希值进行比较。

这样效率更高,因为它只需要在 NSUInteger 值之间进行比较,即使 NSDictionary 的键是 NSString s 或其他对象,所以这真的更快。一旦找到与搜索到的键的哈希值相同的键,它就可以遍历所有具有此哈希值的键,并通过调用 isEqual 将它们与搜索到的键进行比较,但在这个阶段将有更少的键循环通过(如果键的散列确实是唯一的,甚至可能只有一个)

关于objective-c - 'hash'方法在Objective-C中做什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com