偶尔,当我向下看一个对象响应的选择器列表时,我看到哈希出现了.有一段时间了,我想知道这意味着什么,但我从来没有找到过.
如果您能告诉我选择器的作用以及这样做的常见用途,我将非常感激.
解决方法
它计算对象的哈希值,这在HashTables中特别有用,例如当对象用作NSDictionary的键时.
对象哈希必须具有以下属性:
>要被视为相同的两个相同类的对象应返回相同的哈希
>具有diffent哈希的两个对象永远不会被视为相等
>具有相同散列的两个对象不必彼此相等;无论如何,散列越独特,NSDictionary查找的性能就越好.
>如果还应尽可能快地计算,以避免字典中的性能问题
有关更多信息,请参见read the NSObject Protocol documentation,其中定义了此哈希方法.
例如,字符串的哈希函数可以是此字符串的字符数,或其字符的ascii代码的总和,或类似的任何内容.
当你在NSDictionary中搜索给定的密钥时,一种解决方案是将搜索到的密钥与字典中的所有其他密钥进行比较,这需要循环遍历所有密钥并在每个密钥上调用isEqual,这将花费很长时间.时间,如果字典有很多条目.因此,Cocoa将计算搜索到的键的哈希值,并将其与字典中键的所有(预先计算的)哈希值进行比较.
这样更有效,因为它只需要在NSUInteger值之间进行比较,即使NSDictionary的键是NSStrings或其他对象,所以这真的更快.一旦找到与搜索到的密钥的散列具有相同散列的密钥,它就可以使用此散列循环所有密钥,并通过调用isEqual将它们与搜索到的密钥进行比较,但在此阶段将会少得多循环的密钥(如果密钥的散列真的是唯一的,甚至可能只有一个)