Warum NSNotFound nicht -1, sondern NSIntegerMax ist

7

NSNotFound ist als NSIntegerMax definiert, das auf 32-Bit- und 64-Bit-Werten unterschiedliche Werte hat, was für persistente und verteilte Umgebungen eine Menge Unannehmlichkeiten mit sich bringt. Warum nicht als -1 definieren?

PS, In ObjC und Cocoa gibt einige indexOf ... Methoden NSNotFound zurück, aber einige gibt -1 zurück, gibt es einen Grund, warum diese Ergebnisse inkonsistent sind.

    
kliu 18.02.2012, 03:37
quelle

3 Antworten

10

Nun, die Antwort ist wahrscheinlich nicht, weil sie manchmal als vorzeichenloser Wert zurückgegeben wird. In Objective-C-Konvertierungen zwischen signed und unsigned sind effektiv Bitkopien, so dass Sie ein unsigniertes Zeichen mit -1 vergleichen können und die erwartete Antwort erhalten ( Die Werte sind alle Einsen - -1 als Vorzeichen, maximale Ganzzahl als Vorzeichen. Siehe Beantworten Sie diese Frage .

Wir kommen also zu Ihrem zweiten Teil der Frage, warum in der Inkonsistenz? Well Vielfalt ist die Würze des Lebens , oder anders gesagt es ist jetzt so seltsam wie Folk - die Leute sind nur widersprüchlich, nicht komplizierter als das!

    
CRD 18.02.2012, 05:54
quelle
12

Diese Notiz von die Dokumente ist wahrscheinlich relevant:

  

Spezielle Überlegungen

     

Vor Mac OS X 10.5 wurde NSNotFound als 0x7fffffff definiert. Bei 32-Bit-Systemen war dies effektiv gleich NSIntegerMax . Um 64-Bit-Umgebungen zu unterstützen, ist NSNotFound nun formal als NSIntegerMax definiert. Dies bedeutet jedoch, dass der Wert in 32-Bit- und 64-Bit-Umgebungen unterschiedlich ist.

    
Josh Caswell 18.02.2012 03:54
quelle
7

Fast sicher, weil einige der Funktionen, die es zurückgeben, einen unsignierten Wert zurückgeben, wie zum Beispiel NSIndexOfObject :

%Vor%     
paxdiablo 18.02.2012 03:44
quelle

Tags und Links