Может кто-нибудь подтвердить и объяснить, почему это происходит:
На симуляторе (7.1, 32-бит):
NSNumber *a = [NSNumber numberWithFloat:0.5]; // hash = 506952114
NSNumber *b = [NSNumber numberWithFloat:1.0]; // hash = 2654435761
NSNumber *c = [NSNumber numberWithFloat:2.0]; // hash = 1013904226
На устройстве (7.1, 32-разрядная версия):
NSNumber *a = [NSNumber numberWithFloat:0.5]; // hash = 2654435761
NSNumber *b = [NSNumber numberWithFloat:1.0]; // hash = 2654435761 - SAME!
NSNumber *c = [NSNumber numberWithFloat:2.0]; // hash = 5308871522
Я думал, что это может быть 32-битная проблема, но когда я пытаюсь сделать то же самое на 64-битном симуляторе и устройстве, я получаю ту же проблему. Симулятор в порядке, устройства имеют идентичные хэши.
Я пытался добавить уникальные объекты в NSMutableOrderedSet
и заметил, что два моих объекта, которые были идентичны, за исключением разных значений 0,5 и 1,0, не добавлялись оба, и вот почему. Я пробовал и поплавки, и удвоения с тем же результатом.
Но почему?
hash
? - person Sulthan   schedule 18.06.2014hash
не гарантирует уникальность. Это как почтовый индекс. У многих людей будет один и тот же почтовый индекс, но почтовые индексы по-прежнему очень помогают, когда вы кого-то ищете. Безhash
смысла нет, если у вас тоже нет хорошегоisEqual
. - person Sulthan   schedule 18.06.2014