Frage

NSInteger/NSUInteger sind Kakao-definiert Ersatz für die regelmäßige gebaut-in-Typen.

Ist es irgendeinen Vorteil durch die Verwendung der NS - * - Typen über die built-ins?Was bevorzugen Sie und warum?Sind NSInteger und int die gleiche Breite auf 32-bit / 64-bit-Plattformen?

War es hilfreich?

Lösung

Die Art, wie ich es verstehe, ist, dass NSInteger et al.sind Architektur sicher Versionen des entsprechenden C-Typen.Im Grunde Ihre Größe variiert abhängig von der Architektur, aber NSInteger, zum Beispiel, ist garantiert, um keine gültigen Zeiger für die aktuelle Architektur.

Apple empfiehlt, dass Sie diese verwenden, um die Arbeit mit OS X 10.5 und höher, und der Apple-API:s Sie verwenden werden, also ist es definitiv eine gute Idee, in die Gewohnheit, Sie zu verwenden.Sie erfordern ein wenig mehr eingeben, aber abgesehen davon scheint es nicht zu sein irgendeinem Grund, Sie nicht zu verwenden.

Andere Tipps

Quantisierung Themen für die 64-bit-Laufzeit

In einigen Situationen kann es guten Grund für die Verwendung von standard-Typen statt NSInteger:"unerwarteten" memory aufblasen in einer 64-bit-system.

Klar, wenn eine ganze Zahl ist 8 statt 4 bytes des Arbeitsspeichers durch die Werte verdoppelt.Da nicht jeder Wert ist eine ganze Zahl, jedoch sollten Sie in der Regel nicht zu erwarten, dass der Speicherbedarf Ihrer Anwendung zu verdoppeln.Jedoch, die Art und Weise, die Mac OS X Speicher zuweist, ändert sich je nach der Menge von Speicher angefordert.

Derzeit, wenn Sie Fragen 512 bytes oder weniger, malloc rundet auf die nächste Vielfache von 16 bytes.Wenn Sie Fragen, für mehr als 512 bytes, aber malloc rundet auf die nächste Vielfache von 512 (mindestens 1024 bytes).Angenommen, dann, dass Sie eine Klasse definieren, die -- unter anderem -- erklärt fünf NSInteger Instanz-Variablen, und dass auf einem 32-bit-system jede Instanz einnimmt, sagen, 272 bytes.Auf einem 64-bit-system, Instanzen würde in der Theorie erfordern 544 bytes.Aber, da der memory allocation-Strategie wird eigentlich besetzen 1024 bytes (nahezu Vervierfachung).Wenn Sie eine große Anzahl dieser Objekte, den Speicherbedarf Ihrer Anwendung deutlich größer als die, die Sie sonst erwarten.Wenn Sie ersetzt die NSInteger Variablen mit sint_32 Variablen, Sie würde Sie nur 512 Byte.

Wenn Sie die Wahl, was Skalare zu verwenden, stellen Sie daher sicher, dass Sie wählen Sie etwas, das sinnvoll ist.Gibt es einen Grund, warum Sie müssen einen Wert größer als Sie benötigt in der 32-bit-Anwendung?Mit einem 64-bit-Ganzzahl zu zählen einer Anzahl von Sekunden ist kaum nötig sein...

64-bit ist eigentlich die raison d ' être für NSInteger und NSUInteger;bevor 10.5, die nicht vorhanden ist.Die zwei sind ganz einfach definiert, wie sehnt sich danach, in der 64-bit-und als int-Werte im 32-bit:

#if __LP64__ || NS_BUILD_32_LIKE_64
typedef long NSInteger;
typedef unsigned long NSUInteger;
#else
typedef int NSInteger;
typedef unsigned int NSUInteger;
#endif

So wird Ihnen an Stelle der mehr grundlegende C-Typen, wenn Sie möchten, dass die 'bit-native' Größe.

CocoaDev hat ein paar mehr Infos.

Ich bevorzuge die standard-c Stil-Angaben aber nur, weil ich switch zwischen mehrere Sprachen, und ich nicht zu viel darüber nachdenken, es klingt aber wie sollte ich beginnen, nsinteger

Für das importieren und exportieren von Daten in Dateien oder über das Netz ich verwenden UInt32, SInt64 etc...

Diese werden garantiert, um eine bestimmte Größe haben, unabhängig von der Architektur und Hilfe bei der Portierung von code auf anderen Plattformen und Sprachen, die auch teilen diese Typen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top