Größe von NSArray

8

Als ich versuchte, die Größe von NSArray zu überprüfen, die ohne jede Kapazität deklariert wurde, fand ich es 4. Jetzt ist die Frage, warum es immer 4 ist? Bitte hilf mir, es zu finden .... Danke

    
Milesh 21.02.2011, 05:02
quelle

2 Antworten

6

Gegeben:

%Vor%

Sie erhalten entweder 4 oder 8, abhängig davon, ob Sie ein 32- oder 64-Bit-System verwenden. Beachten Sie, dass ich% ce_de% nicht gezielt initialisiert habe; Dies ist nicht notwendig, da foo die Bytegröße von sizeof(foo) angibt und foo nur ein zufälliger Zeiger auf ein Objekt ist. Wäre es egal, wenn das foo wäre, wären alle 4 oder 8.

Wenn Sie die zugewiesene Größe einer Instanz einer bestimmten Klasse haben möchten, bietet die Objective-C-Laufzeit eine Introspektions-API, die genau das tun kann. Allerdings kann ich mir keinen Grund vorstellen, warum das in einem Programm mehr als nur vorübergehend interessant wäre.

Beachten Sie, dass die Zuweisungsgröße einer Instanz keine Unterzuweisungen berücksichtigt. I.e. Ein NSArray hat wahrscheinlich einen Sicherungsspeicher, der eine separate Zuordnung ist.

Um es noch einmal zu sagen:

sizeof (foo) im obigen Code hat nichts mit der Größe der zugewiesenen Instanz zu tun.

    
bbum 21.02.2011, 06:09
quelle
13

Wenn Sie von sizeof sprechen, ist es nicht der richtige Weg herauszufinden, wie viele Daten ein NSArray enthält. Auf Objective-C-Objekte wird immer über Zeiger zugegriffen, und die Größe eines Zeigers auf dem iPhone beträgt 4 Byte. Das sagt dir sizeof . Um herauszufinden, wie viele Objekte sich in einem Array befinden, fragen Sie das Array nach seinem count .

    
Chuck 21.02.2011 05:12
quelle

Tags und Links