有时候,当我向下看一个对象响应的选择器列表时,我看到hash
出现了。有一段时间了,我想知道这意味着什么,但我从来没有找到过。
如果您能告诉我选择器的作用以及这样做的常见用途,我将非常感激。
答案 0 :(得分:8)
它计算对象的哈希值,这在HashTables中特别有用,例如当对象用作NSDictionary
的键时。
对象hash
必须具有以下属性:
NSDictionary
查找的性能就越好。有关详细信息,请read the NSObject Protocol documentation定义此hash
方法。
例如,字符串的hash
函数可以是此字符串的字符数,或其字符的ascii代码的总和,或类似的任何内容。
当您在NSDictionary
中搜索给定密钥时,一种解决方案是将搜索到的密钥与字典中的所有其他密钥进行比较,这需要循环通过所有密钥并调用{{1}在每个键上,如果字典有很多条目,那将需要很长时间。因此,Cocoa将计算搜索到的键的哈希值,并将其与字典中键的所有(预先计算的)哈希值进行比较。
这样效率更高,因为它只需要在isEqual
值之间进行比较,即使NSUInteger
的键是NSDictionary
s或其他对象,所以这是真的快点。
一旦找到与搜索到的密钥的哈希具有相同哈希的密钥,它就可以使用此哈希循环所有密钥,并通过调用NSString
将它们与搜索到的密钥进行比较,但是在此阶段循环的密钥要少得多(如果密钥的散列真的是唯一的话,甚至可能只有一个)
答案 1 :(得分:0)
它用于在关联数组数据类型中实现高效的hash tables,例如NSDictionary
。