So weisen Sie ein dynamisches typisiertes Objekt zu

7

In objective-c habe ich viel über das dynamische Tippen gesprochen. Aber ich habe keine Beispiele gesehen von dem, was ich denke, dass es sein sollte.

lässt mich sagen, dass ich eine generische Funktion habe, die zwei Objekte jonglieren soll (eines wird zugewiesen und das andere wird freigegeben) und das aufrufende Objekt bindet es selbst an das neu zugewiesene Objekt. Beide werden von class0

geerbt

Bitte zögern Sie nicht, dies zu interpretieren, wie Sie wollen, wenn Sie denken, dass es etwas erklären wird!

Wenn die Klasse zur Laufzeit ausgewählt wird, wie gehe ich mit der Argumentliste um (? ist momentan ein Platzhalter) Wie ordne ich ein Objekt zu, dessen Klasse erst zur Laufzeit definiert wird?

%Vor%     
Binarian 26.02.2009, 05:37
quelle

2 Antworten

19

Ich habe keine Ahnung, was der Code, den Sie dort haben, zu tun versucht, er ist nicht syntaktisch gültig, und die Manipulation von Ansichten hat nichts mit Ihren Fragen zu tun. Wie auch immer, wenn du den Typ wirklich nicht kennst, benutzt du normalerweise "id", was für codegen in "void *" umgewandelt wird. Es hat die spezielle Eigenschaft, dass es angenommen wird, irgendeine Nachricht zu empfangen, so dass es keine Compiler-Warnungen für unbekannte Nachrichten auslöst.

Um eine Klasse zu instanziieren, müssen Sie nur das Objekt "Class" dafür halten. In Objective C beziehen sich alle Instanzen einer Klasse auf ein Klassenobjekt (den isa-Zeiger in der Legacy-Laufzeit), das ebenfalls auf Methoden reagiert. Also mit anderen Worten, im folgenden Code:

%Vor%

NSArray ist eigentlich ein Objekt. Das erzeugt also äquivalente Code-Ergebnisse:

%Vor%

oder sogar

%Vor%

Was die Funktion NSClassFromString verwendet, die in die Laufzeit läuft und eine Klasse mit dem Namen findet, den Sie übergeben.

Alle Objekte geben ihre Klasse zurück, wenn sie den Klassen-Getter verwenden, um ein Objekt zu imitieren, das der gleichen Klasse wie ein vorhandenes Objekt entspricht:

%Vor%     
Louis Gerbarg 26.02.2009, 06:02
quelle
0

Das habe ich jetzt

%Vor%

Ich kann es noch nicht verifizieren, weil ich ein Verbindungsproblem habe ... Ich habe diese Funktion meinem Root-Controller hinzugefügt, aber aus irgendeinem Grund bekomme ich eine Warnung, dass die Funktion implizit deklariert ist. Und der Build schlägt fehl, weil der Funktionsaufruf niemals mit irgendetwas verknüpft wird

    
Mike 26.02.2009 06:37
quelle

Tags und Links