Ist es möglich, eine Methode als Argument in Objective-C zu übergeben?
Habe ich eine Methode, die variiert von einem einzigen Methodenaufruf von innen, und ich möchte an Sie übergeben der Methode/Signatur der Methode, die er variiert von als argument... ist das möglich in Objective-C oder ist das zu viel zu hoffen?
InformationsquelleAutor der Frage eriaac | 2009-02-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
NSInvocation ist eine Klasse, für die Nachbereitung eine Methode aufruft, die in einem Objekt. Sie können einen Selektor (Methodensignatur), setzen Sie Argumente, die durch den index. Sie können dann festlegen, dass ein Ziel-und call-aufrufen zum auslösen der Anruf, oder lassen Sie das Ziel nicht gesetzt, und verwenden Sie invokeWithTarget: in einer Schleife von einer Art zu nennen, das für viele Objekte.
Ich denke, es funktioniert ein wenig wie diese:
Oder, wenn Sie nicht wollen, um pass invocation-Objekte in dieser Methode können Sie mithilfe der SEL-Typ zu akzeptieren, einen Selektor (Methodensignatur).
Dann weisen Sie den Wahlschalter auf ein invocation-Objekt, um es auf Objekte.
InformationsquelleAutor der Antwort Alex Wayne
Oder wenn Sie mit der
fooWithMethod:(SEL)selector
Ansatz, nur[myObject performSelector:selector]
auf, wenn es keine anderen Argumente.Sehen NSObject für details.
InformationsquelleAutor der Antwort cdespinosa
Wie gesagt, Sie können passieren die Wähler die Methode, die Sie anrufen möchten. Über einen Selektor gibt es verschiedene Möglichkeiten, um tatsächlich rufen Sie die Methode:
NSObject
sperformSelector:
performSelector:withObject:
undperformSelector:withObject:withObject:
MethodenNSInvocation
Objektobjc_msgSend
oderobjc_msgSend_stret
IMP
dieser Methode können Sie unter VerwendungmethodForSelector:
Welche Sie verwenden hängt wirklich von der situation. Wenn die Leistung ist nicht kritisch, ich würde gehen Sie mit 1, wenn Sie müssen übergeben Sie 0, 1 oder 2 Objekten. Wenn die
performSelector:...
Methoden nicht übereinstimmen, dann würde ich mit 2 oder 3. Da die Einrichtung einerNSInvocation
Objekt erfordert eine Menge boilerplate-code, den ich lieber 3, aber ich denke, das ist eine Frage der persönlichen Wahl, es sei denn, es gibt performance-Probleme.Wenn die Leistung von dieser Aufrufe ist nicht egal, ich würde 3 oder 4. 3 sollte schneller sein, es sei denn, Sie können den cache der
IMP
s. Aber je nach code kann dies nicht machbar sein oder nicht wirklich helfen. So, hier müssen Sie Profil den code und sehen, welche für Sie besser ist.InformationsquelleAutor der Antwort Sven