Warum zeigt NSNumber auf dieselbe Adresse, wenn der Wert gleich ist?

7

Gegeben folgender Code:

%Vor%

Warum zeigen diese beiden NSNumber-Instanzen auf dieselbe Adresse?

Das macht mich verrückt!

Wenn Sie secondInt zu "4" ändern, funktioniert das natürlich wie erwartet.

Danke, Jérémy

    
jchatard 24.11.2010, 18:12
quelle

3 Antworten

12

Dies ist wahrscheinlich entweder eine Compiler-Optimierung oder ein Implementierungsdetail: Da NSNumber unveränderlich ist, müssen sie keine separaten Instanzen sein.

EDIT: wahrscheinlich eine Implementierungsoptimierung, die darüber nachdenkt. Wahrscheinlich NumberWithInt gibt ein Singleton zurück, wenn es anschließend mit derselben Ganzzahl aufgerufen wird.

    
Tim Kemp 24.11.2010, 18:16
quelle
6

Mein Designinstinkt sagt mir, dass, wenn die Identität des Scores wichtig ist, im Unterschied zu seinem bloßen Wert, Sie ein Scoring-Objekt anstelle von normalen NSNumbers sortieren sollten.

Aber das beiseite: Im Notfall können Sie einfach NSValue ähnlich wie Sie NSNumber verwenden. Es ist ein wenig mehr Arbeit, um Werte herauszuholen, aber NSValue selbst hat nicht das Koaleszenzverhalten der Instanz NSNumber für kleine Werte.

Ein Code, der alle drei Verhaltensweisen ausübt:

%Vor%

Auf meinem Mac ergibt dies eine Ausgabe wie:

%Vor%     
rgeorge 24.11.2010 19:32
quelle
3

Da sie denselben hash -Wert haben, gibt NSNumber Ihnen einen zwischengespeicherten Zeiger aus der ersten Zuweisung zurück.

    
Jacob Relkin 24.11.2010 18:17
quelle

Tags und Links