2012-03-26 9 views
0

Ich bin die -hash Methode für eine Klasse implementieren, die eine NSUInteger zurückgeben soll. Meine Implementierung für es würde dies ähnlich sein:Auswirkungen der Rückgabe einer unsigned long, wenn unsigned int erwartet wird

- (NSUInteger) hash { 
    return CFHash(self->cfObj); 
} 

Nun CFHash ein CFHashCode gibt, die einen typedef ed unsigned long, aber soweit ich weiß ein NSUInteger ist entweder ein unsigned long oder ein unsigned int .

Auf welche Art von Problemen könnte ich stoßen, wenn ich eine unsigned long zurücksende, wenn die Anwendung eine unsigned int erwartet?

+0

Ich denke, es wird keine Probleme geben, auch wenn es Hash-Kollisionen gibt, sollten sie richtig behandelt werden. – Felix

Antwort

3

Für welche Plattform kompilieren Sie? Wie Sie bereits erwähnt haben, ist NSUInteger entweder ein vorzeichenloser long oder unsigned int, je nachdem, ob Ihre Architektur 32 oder 64 bit ist oder nicht. Für 64-Bit-OS X-Anwendungen ist das offensichtlich in Ordnung.

Ich denke, Sie sollten auch auf iOS oder 32-Bit OS X-Anwendungen sicher sein. Die docs beschreiben den Rückgabetyp CFHash:

An integer of type CFHashCode that represents a hashing value for cf. 

Das ist kein zwingender Grund, aber die default implementation of hash apparently uses CFHash anyway.

+0

Ich kompiliere für iOS, aber ich bin mir nicht sicher, ob das 32 oder 64-Bit war. Meine Hauptsorge war, dass die Rückgabe eines Long zu einer Art Überlauf auf 32-Bit-Systemen führen würde, aber aus Ihrer Antwort muss ich mir deswegen keine Sorgen machen. –

+0

Sie sollten in Ordnung sein - iOS ist 32-Bit, aber Sie sollten keine Kollisionen mit 'CFHash' mit Ganzzahlen bekommen. –

Verwandte Themen