Mein Verständnis der Objective-C id
Art ist, dass es ein Zeiger auf ein Objekt des unbekannten Typs ist. In meinen Augen ist es wie eine Lücke * für Objective-C-Klassen mit etwas Compiler Zucker oben für Dinge wie Typprüfung. Meine Frage ist warum ist es nicht id*
anstelle von id
dann, da es ein Zeigertyp ist? Wenn dies Java oder C# wäre, wo Objektreferenzen nicht unter Verwendung einer *
deklariert werden, wäre ich nicht so überrascht. Aber in Objective-C wird jede Klasse von C-Style-Zeigern referenziert, warum also die *
für den unbekannten Objekttyp ausblenden?Warum gibt die ID in Objective-C den Stern aus?
Antwort
Die id typedef
ist bereits ein Zeiger:
typedef struct objc_object {
Class isa;
} *id;
Vom Objective-C Programming Language:
In Objective-C, Objektkennungen sind von einem bestimmten Datentyp:
id
. Dieser Typ ist der allgemeine Typ für jede Art von Objekt, unabhängig von der Klasse , und kann für Instanzen einer Klasse und für Klassenobjekte selbst verwendet werden.id anObject;
Für die objektorientierten Konstrukte von Objective-C, wie als Methode Rückgabewert ersetzt int id als Standard-Datentyp. (Für streng C Konstrukte, wie Funktionsrückgabewerte, int bleibt der Standardtyp.)
Das Schlüsselwort nil als ein Null-Objekt definiert ist, eine ID mit einem Wert von 0. id, nil, und der Andere grundlegende Objective-C-Typen sind in der Header-Datei objc/objc.h definiert.
ID als Zeiger auf ein Objekt-Datenstruktur definiert:
typedef struct objc_object {
Class isa;
} *id;
Jedes Objekt hat somit eine variable isa, die es von dem, was Klasse teilt es eine Instanz ist. Da der Klassentyp selbst ist als Zeiger definiert:
typedef struct objc_class *Class;
die
isa
Variable ist häufig als die
- 1. Warum gibt die Funktion generate-id() dieselbe ID zweimal zurück?
- 2. AMF0 Parser in ObjectiveC
- 3. Wann kann ich den Whatever-Stern benutzen?
- 4. Attribute aus importiertem Modul mit Stern erhalten
- 5. ObjectiveC-Blöcke Java-Äquivalent
- 6. Warum werden Objektvariablen mit einem Stern deklariert?
- 7. Warum gibt IPC :: Open2 :: open2 die Elternprozess-ID zurück?
- 8. Warum gibt XSLT standardmäßig den gesamten Text aus?
- 9. ObjectiveC - Anzeigefenster durch verteilte Objekte
- 10. 2D Dynamische Speicherzuweisung - ObjectiveC
- 11. PHP-Stern füllt nicht aus, wenn Benutzer Favoriten Artikel
- 12. Was bedeutet der Stern auf der Thread-ID?
- 13. Was bedeutet * (Stern) in Ruby?
- 14. Warum gibt sprintf() nichts aus?
- 15. ObjectiveC: Wo private Instanzeigenschaften deklarieren?
- 16. Präsentieren Sie kleine ModalViewController ObjectiveC
- 17. Warum gibt es Schrägstriche in dieser Div-ID?
- 18. ObjectiveC - wie NSUserNotification Kennung Eigenschaft
- 19. Warum gibt If Else Statment nichts aus?
- 20. Warum gibt mein Code den Fehler "fehlende: nach Eigenschaft id" in JavaScript zurück?
- 21. Wie konvertiere ich den NSUInteger-Wert in den int-Wert in objectiveC?
- 22. Ist ein Stern in einem Funktionszeiger optional?
- 23. Stern Muster Rekursion Python
- 24. Warum gibt GCC "lea" statt "sub" für die Subtraktion aus?
- 25. Ignorieren Stern (*), während diff tat in Linux
- 26. Warum die richtige ID nicht in die Tabelle einfügt
- 27. Warum gibt meine Matrix nicht die korrekte Genauigkeit aus?
- 28. Warum gibt mein Wortzähler die Zeile `1` aus?
- 29. ObjectiveC - Freigabe von Objekten als Parameter
- 30. Warum gibt die Graph-API zum Abfragen einer Gruppen-URL einfach die Gruppen-ID zurück?
Es gibt in 'CLASS' kein Stern entweder bezeichnet„isa Zeiger.“. – kennytm