Frage

Ich mag eine Methode Dispatch-Tabelle einrichten und ich frage mich, ob es möglich ist Zeiger auf ein Verfahren in Objective-C zu erzeugen (wie Zeiger in C funktionieren). Ich habe versucht, einige Objective-C Runtime-Funktionen zu verwenden, um dynamisch Methoden zu wechseln, aber das Problem ist, es wird alle Instanzen beeinflussen.

Wie ich bin sehr neu in Objective-C, ein illustriertes Beispiel sehr geschätzt würde.

War es hilfreich?

Lösung

Objective-C-Methoden selectors genannt werden, und werden durch den SEL Datentyp repräsentiert. Wenn Ihr Objekt von NSObject erbt, können Sie es sagen, einen Selektor (d nennen ein Verfahren) wie so auszuführen:

SEL selector = @selector(doSomething:);
[obj performSelector:selector withObject:argument];

Dies setzt voraus, Sie haben ein Verfahren definiert, wie:

-(void)doSomething:(MyObject*)arg;

Mit Selektoren zugewiesen Datentypen durch das SEL Schlüsselwort @selector, die den Namen der Methode nimmt würden Sie halten möchten. Der Name der Methode ist die Methode Namen aller Argumente beraubt. Zum Beispiel:

-(void)doSomething:(MyObject*)arg withParams:(MyParams*)params

Würde als @selector(doSomething:withParams:) referenziert werden.

Andere Tipps

Ja! In Objective-C, Funktionszeiger sind Selektoren genannt. Wenn Sie eine Methode wie folgt definiert:

- (void)myFunctionWithObject:(NSObject*)obj otherObject:(NSNumber*)obj2
{
}

Der Wähler wird wie folgt erklärt:

@selector(myFunctionWithObject:otherObject:)

Um einen Selektor auf einem Objekt durchführen, können Sie verwenden:

[object performSelector:@selector(myFunction)];

oder

[object performSelector:@selector(myFunctionTakingParameter:) withObject: o];

Der Datentyp-Selektor ist besonders nützlich für Themen und Zeiten, in denen Sie einen Thread versenden kann und es einen Selektor auf die Nachricht liefern Sie es möchten aufzurufen. Wenn Sie ein Array von Selektoren (oder eine Dispatch-Tabelle) erstellen müssen, oder wenn Sie Selektoren mit mehreren Parametern aufrufen müssen, können Sie die NSInvocation Klasse. Es stellt einen Wrapper für einen Wähler und ermöglicht es Ihnen tatsächlich Argumente angeben.

Sie sollten bedenken, dass Objective-C bereits auf einer voll dynamischen Methode Dispatch-Tabelle basiert. Es klingt wie Selektoren Aufrechterhaltung Funktionszeiger verwendet wird für Sie gut funktionieren, wenn Sie nur einen Verweis auf eine Funktion benötigen, though.

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