Wie wird eine Objective-C-Methode von einer C-Methode aufgerufen?
Habe ich eine Obj-C-Objekt mit einer Reihe von Methoden innerhalb der it. Manchmal ist eine Methode aufrufen muss eine andere Methode innerhalb des gleichen Objekts. Ich kann nicht scheinen, um herauszufinden, wie man eine C-Methode aufrufen, eine Obj-C-Methode...
FUNKTIONIERT: Obj-C-Methode aufrufen Obj-C-Methode:
[self objCMethod];
FUNKTIONIERT: Obj-C-Methode der Aufruf einer C-Methode:
cMethod();
NICHT FUNKTIONIERT: C-Methode aufrufen Obj-C-Methode:
[self objCMethod]; //<--- this does not work
Letzten Beispiel bewirkt, dass der compiler spuckt diese Fehlermeldung:
Fehler: "self" schwarzarbeit (erste Benutzung in dieser Funktion)
Zwei Fragen. Warum können nicht die C-Funktion finden Sie unter "self" - variable, obwohl es im inneren des "selbst" - Objekt, und wie rufe ich es ohne den Fehler verursacht? Viel Dank für jede Hilfe!!! 🙂
InformationsquelleAutor der Frage Dave Gallagher | 2009-08-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Damit das funktioniert, definieren Sie die C-Methode, wie diese:
und wenn Sie es nennen, nennen es wie folgt:
dann, Sie wäre in der Lage zu schreiben:
In Ihrem
cMethod
.Dies ist, weil die
self
variable ist ein spezieller parameter übergeben, die Objective-C-Methoden automatisch. Da C-Methoden genießen nicht dieses Privileg, wenn Sie verwenden möchtenself
senden Sie es selbst.Sehen Sie mehr in der Methoden-Implementation-Abschnitt der programming guide.
InformationsquelleAutor der Antwort Aviad Ben Dov
Ich weiß deine Frage ist schon beantwortet von Aviad, sondern nur um die info, da diese nicht ohne Bezug:
In meinem Fall musste ich rufen Sie einen Objective-C-Methode von einer C-Funktion, die ich nicht nennen mich (ein Carbon-Ereignis-Funktion-ausgelöst durch die Registrierung einer globalen hotkey-event), so dass die übergabe selbst als parameter nicht möglich war. In diesem Fall können Sie dies tun:
Definieren Sie eine Klasse variable, die in Ihrer Umsetzung:
Dann in Ihrer init-Methode, stellen Sie es selbst:
Können Sie dann anrufen Objective-C-Methoden von einem beliebigen C-Funktion in die Klasse, ohne die Notwendigkeit, pass
self
als parameter an die Funktion:InformationsquelleAutor der Antwort Form
C-Funktion ist nicht "innerhalb der
self
Objekt". In der Tat, nichts ist.Objective-C-Methoden effektiv
self
als eine implizite argument, mit Magie getan unter der Haube. Für einfache C-Funktionen, Sie sind nicht verbunden mit irgendeiner Klasse oder ein Objekt, und es gibt keinen Anruf, Magie, so dass keineself
. Wenn Sie es brauchen, die Sie benötigen, um es zu übergeben, um Ihre C-Funktion explizit als argument.InformationsquelleAutor der Antwort Pavel Minaev
Völlig ehrlich, es gibt keine solche Sache wie eine C-Methode. C-Funktionen. Um die Unterschiede zu beleuchten, betrachten die folgenden Beispiele:
Dies ist ein C-Programm definiert einen Typ und zwei Funktionen, die zusammen mit ihm:
Hier ist ein Objective-C-Implementierung des Programms:
Die Ausgabe des reinen C-Programm war:
Den Ausgang des Objective-C-Programm war:
Der einzige Unterschied ist, all den Müll, der NSLog legt vor dem text. Die Funktionalität ist genau das gleiche. Also, in C, Sie können etwas in der Art, wie Methoden, aber Sie sind eigentlich nur Funktionen, die enthalten einen Zeiger auf einen struct.
Ich glaube nicht, das beantwortet deine ursprüngliche Frage, aber es hat klar, bis einige Terminologie-Probleme, die Sie scheinen, zu haben gewesen habend.
InformationsquelleAutor der Antwort Jonathan Sterling
Weitere option für die Antworten so weit, ist die Verwendung der
objc_msgSend()
Funktion der Objective-C runtime.InformationsquelleAutor der Antwort Dave DeLong