Was ist die Verwendung von performSelector in iOS?

7

Ich bin etwas verwirrt in Bezug auf performSelector . Ich google schon. aber nicht klar für mich. Jeder kann die Rolle von performSelector erklären.

Danke

%Vor%

und

%Vor%

beide sind gut für mich. Was ist der Unterschied zwischen diesen beiden? [self btnClicked] und [self performSelector:@selector(btnClicked)] ;

    
QueueOverFlow 18.07.2012, 10:39
quelle

5 Antworten

10

Die beiden sind ziemlich identisch, wenn sie verwendet werden, wie Sie gezeigt haben, aber Letzteres hat den Vorteil, dass Sie dynamisch bestimmen können, welcher Selektor zur Laufzeit aufgerufen werden soll.

%Vor%

[Quelle]

    
James Webster 18.07.2012, 10:42
quelle
8

Apple Doc ist dein Freund.

NSObject-Protokollreferenz

Es

  

Sendet eine bestimmte Nachricht an den Empfänger und gibt das Ergebnis von zurück   die Nachricht.

Insbesondere:

  

Die Methode performSelector: entspricht dem Senden eines aSelectors   Nachricht direkt an den Empfänger . Zum Beispiel alle drei der   Die folgenden Nachrichten machen dasselbe:

%Vor%      

Mit der performSelector: Methode können Sie jedoch Nachrichten senden, die   werden erst zur Laufzeit festgelegt . Ein Variablenselektor kann als übergeben werden   das Argument:

%Vor%      

Das Argument aSelector sollte eine Methode identifizieren, die nein akzeptiert   Argumente. Verwenden Sie für Methoden, die etwas anderes als ein Objekt zurückgeben   NSInvocation.

Ich hoffe, das hilft.

    
Lorenzo B 18.07.2012 10:50
quelle
4

Mit einem selector -Objekt können Sie eine Methode aufrufen, die Sie zum Zeitpunkt der Kompilierung nicht kennen. Sie müssen nur den Namen einer Methode als Zeichenfolge kennen, um sie aufzurufen.

Wenn der Name der Methode, die Sie aufrufen, zur Kompilierungszeit bekannt ist, ist die Verwendung von Selektoren kontraproduktiv: Der Code wird ohne erkennbaren Vorteil weniger lesbar. Wenn Sie eine Bibliothek schreiben, die Methoden in anderem Code aufrufen muss, der separat von der Bibliothek kompiliert wird, bieten Selektoren eine Möglichkeit, die beiden Codeabschnitte zu entkoppeln.

Wenn Sie beispielsweise eine Timer-Klasse schreiben, die Sie nach Ablauf eines Zeitintervalls zurückrufen kann, kennt Ihr Timer den Namen der Funktion, die er aufrufen muss, nicht. Daher kann er nicht schreiben:

%Vor%

Aber wenn Sie Ihrem Timer einen Selektor geben, könnte der Timer Sie zurückrufen.

%Vor%     
dasblinkenlight 18.07.2012 10:43
quelle
2

Mit PerformSelector können Sie entscheiden, welche Nachricht zur Laufzeit übergeben wird (späte Bindung), im Gegensatz zu Sprachen wie Ebene C. Wenn Sie den Namen einer Methode in einer objektiven C-Klasse kennen, können Sie

verwenden %Vor%

Um eine Zeichenkette in einen Selektor umzuwandeln, rufen Sie Ihre Klasse mit performSelector auf. Auf diese Weise können Sie verschiedene Funktionen auswählen, die während der Laufzeit aufgerufen werden. Sie können sogar auswählen, welche Funktion mit einer Konfigurationsdatei aufgerufen werden soll.

    
futureelite7 18.07.2012 10:48
quelle
1

performSelector ruft eine Methode auf, die in der Klasse deklariert und implementiert wurde. Es wird verwendet, wenn Sie eine Aktion im Code an ein Ereignis anhängen müssen.

    
LJ Wilson 18.07.2012 10:41
quelle

Tags und Links