Größe von NSArray
Als ich versuchte, überprüfen Sie die Größe von NSArray, welches deklariert ist ohne Kapazität, fand ich es 4. Nun stellt sich die Frage, warum es immer 4? bitte helfen Sie mir Sie zu finden....
Dank
- Was meinst du mit überprüfen der Größe? Wie
[someArray count]
? Hast du ein code-Beispiel konnten wir sehen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben:
Werden Sie entweder 4 oder 8, je nachdem, ob Sie auf einem 32-oder 64-bit-system. Beachten Sie, dass ich ganz gezielt nicht initialisieren
foo
; es gibt keine Notwendigkeit, so zu tun, alssizeof(foo)
gibt die Bytegröße vonfoo
undfoo
ist nur eine zufällige Zeiger auf ein Objekt. Wäre kein Problem, wenn dasid foo; void*foo; NSString*foo;
alle 4 oder 8.Wenn Sie möchten, dass die zugeteilte Größe eine Instanz einer bestimmten Klasse ist, die Objective-C runtime bietet introspection API, die kann genau das tun. Allerdings kann ich nicht wirklich aus irgendeinem Grund denken, warum, das wäre mehr als passingly interessant in einem Programm.
Beachten Sie, dass die Zuordnung der Größe einer Instanz nicht berücksichtigt, für jede sub-Zuweisungen. I. e. ein NSArray wahrscheinlich hat ein backing-store-das ist eine separate Zuweisung.
Wiederholen:
sizeof(foo) im obigen code hat nichts zu tun mit der Größe des zugeordneten Instanz.
Wenn du redest
sizeof
ist es nicht der richtige Weg, um herauszufinden, wie viele Daten ein NSArray hält. Objective-C-Objekte sind stets Zugriff über Zeiger und die Größe eines Zeigers auf dem iPhone ist 4 bytes. Das ist es, wassizeof
sagt Sie. Um herauszufinden, wie viele Objekte in einem array, Fragen Sie den array für dencount
.sizeof
operator gibt die Größe des Operanden in bytes. Sosizeof
auf jedes Objekt, geben Sie 4. Es ist nicht die "Größe des Arrays" (egal, wie Sie Sie definieren) — es ist nur die Größe des Zeigers. Nicht nur ein Zeiger auf eine Instanz einer collection-Klasse, aber keine Zeiger.