Frage

Ich möchte einen Proxy kodieren, die Methodenaufrufe auf ein anderes Objekt über TCP ohne NSConnection und NSDistanceObject Sachen weiterleitet. Was ich will, ist mein eigenes Protokoll.

Das Problem ist, dass NSProxy und überwiegenden forwardInvocation: Subklassen nicht ausreichend ist. Ich habe auch methodSignatureForSelector außer Kraft zu setzen

Hier ist meine Frage:

– (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector
{
    return ??? 
}
War es hilfreich?

Lösung 3

fand ich eine intelligente Lösung rel="nofollow zu erzeugen NSInvocation Objekte.

Andere Tipps

@ Brian, kann dies in Ordnung, aber setProtocolForProxy: ist nur für die Optimierung. cocoafan könnte es für seine Lösung Mandat, aber es wäre nicht ein Drop-in-Ersatz sein. Sie sollen Unterschriften der Lage sein, automatisch zu erhalten. Um dies zu erreichen, muss das Netzwerkprotokoll eine Möglichkeit, die Signatur zu beantragen.

Ich glaube, hier die Lösung in dem Netzwerkprotokoll ein „Anfrage Methodensignatur“ Verfahren, enthalten ist und habe es methodSignatureForSelector: auf dem entfernte Objekt und codiert und gibt das Ergebnis führen. Das ist, was NSDistantObject der Fall ist.

setProtocolForProxy: Bereitstellung ist eine wichtige Optimierung, wenn Sie viel klappern gehen, aber es macht Sie auf Objekte beschränken, dass Sie ein Protokoll haben für und vor dem 10.5, die einige lästige Einschränkungen führt (alle Methoden sind erforderlich). Auch auf 10,5, kann es einige problematische Beschränkungen einzuführen, wenn es der einzige Weg, Methode Signaturen zu erhalten.

@cocoafan, ich glaube, Sie wahrscheinlich recht haben diese oben auf NSProxy von Grund auf neu zu erstellen, aber einen Blick auf NSConnection nehmen und sehen, wenn Sie können Unterklasse die Netzwerkverbindung, wie Sie wollen verwalten. Wenn Sie eine Möglichkeit, das zu tun finden (obwohl ich eine einfache Möglichkeit, nicht sofort sehen), werden Sie wahrscheinlich eine Menge Sachen kostenlos von NSDistantObject erhalten.

Die Art und Weise NSDistantObject behandelt dies durch seine setProtocolForProxy: Verfahren, welches ein Protokoll mit der Liste von Methoden gibt, die das Objekt auf dem anderen Ende der Verbindung übernimmt. Es kann dann die Informationen verwenden, für diese Verfahren geeignete NSMethodSignature Objekte zu schaffen, wenn die Weiterleitung zu tun.

Es sieht aus wie die direkteste, das zu tun über die protocol_getMethodDescription() Funktion ist, in <objc/runtime.h> erklärt. Dies gibt eine objc_method_description Struktur, die ein types Feld enthält. Ich glaube, sollten Sie in der Lage sein, diesen Wert in +[NSMethodSignature signatureWithObjCTypes:] passieren eine Methode Signatur-Objekt zu erhalten, die dem entspricht, was im Protokoll erklärt wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top