Може ли някой да потвърди и обясни защо се случва това:
На симулатор (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