Он вычисляет хеш объекта, что особенно полезно в HashTables, например, когда объект используется в качестве ключа для NSDictionary
.
Объект hash
должен иметь следующие свойства:
- Два объекта одного класса, которые должны считаться равными, должны возвращать один и тот же хеш
- Два объекта с разным хешем никогда не будут считаться равными
- Два объекта с одинаковым хешем необязательно равны друг другу; в любом случае, чем более уникальным будет хеш, тем лучше будет производительность для поиска
NSDictionary
.
- If также должен быть максимально быстро вычисляемым, чтобы избежать проблем с производительностью в словарях
Для получения дополнительной информации прочитайте документацию по протоколу NSObject , где определен этот метод hash
.
Например, функция hash
для строки может быть числом символов в этой строке или суммой кодов ascii ее символа, или чем-либо подобным.
Когда вы ищете заданный ключ в NSDictionary
, одним из решений будет сравнение искомого ключа со всеми остальными ключами в словаре, который должен был бы проходить по всем ключам и вызывать isEqual
для каждого ключа. и это займет много времени, если в словаре много записей. Поэтому вместо этого Cocoa вычислит хеш искомого ключа и сравнит его со всеми (предварительно вычисленными) хешами ключей в словаре.
Это гораздо эффективнее, потому что нужно будет только сравнивать значения NSUInteger
, даже если ключи NSDictionary
являются NSString
с или другими объектами, так что это действительно быстрее.
Как только он нашел ключи, которые имеют тот же хэш, что и хэш искомого ключа, он может затем пройти по всем ключам с этим хешем и сравнить их с искомым ключом, вызвав isEqual
, но на этом этапе произойдет намного меньше ключей для цикла (и даже, возможно, только одного, если хеш ключа действительно уникален)