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.
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!
Diese Notiz von die Dokumente ist wahrscheinlich relevant:
Spezielle Überlegungen
Vor Mac OS X 10.5 wurde
NSNotFound
als0x7fffffff
definiert. Bei 32-Bit-Systemen war dies effektiv gleichNSIntegerMax
. Um 64-Bit-Umgebungen zu unterstützen, istNSNotFound
nun formal alsNSIntegerMax
definiert. Dies bedeutet jedoch, dass der Wert in 32-Bit- und 64-Bit-Umgebungen unterschiedlich ist.
Fast sicher, weil einige der Funktionen, die es zurückgeben, einen unsignierten Wert zurückgeben, wie zum Beispiel NSIndexOfObject
:
Tags und Links objective-c