Ist @selector
eine bequeme Syntax für eine längere C-Syntax, oder ist es ein "fest verdrahteter" Teil von die Objective-C Sprache/Compiler? Zum Beispiel weiß ich, dass, wenn ich @property
aufrufen, abhängig von den Argumenten unterschiedliche äquivalente Objective-C-Code "generiert" wird re: Getter und Setter. Was passiert hinter den Kulissen mit @selector
? Gibt es eine Objective-C-Nachricht an?Gibt es eine Möglichkeit, einen Selektor ohne die @Selector-Syntax anzugeben/was hinter den Kulissen mit @Selector
Antwort
@selector()
ist ein Teil der Sprache. Es gibt Literal SEL
genau wie @""
gibt ein Literal NSString
an.
Es ist zu verstehen, dass @selector
einen Selektor darstellt, keine Nachricht. Ein Selektor ist nur ein Name. Es ist nur ein kleiner Teil einer Nachricht. Es enthält nicht einmal Typinformationen.
Beachten Sie auch, dass @property
nichts erzeugt. Es verspricht nur, dass das Objekt auf einen oder zwei Selektoren (Getter und Setter) reagiert. Es gibt mehrere Möglichkeiten, diesen Vertrag zu erfüllen. @synthesize
ist nur einer von ihnen. Sie können die erforderlichen Methoden auch manuell implementieren oder @dynamic
verwenden, um zu versprechen, dass es zur Laufzeit irgendwie gehandhabt wird.
Um die Frage im Titel beantworten, NSSelectorFromString
können Sie einen Selektor von einem NSString
erstellen (Sie können auch das Gegenteil tun mit NSStringFromSelector
), obwohl es effizienter ist @selector
zu verwenden.
Insbesondere werden '@ selector' Direktiven zur Kompilierzeit in SELs umgewandelt, während' NSSelectorFromString() 'eine normale Funktion ist, die zur Laufzeit aufgerufen wird. – Chuck
- 1. GUID Hinter den Kulissen
- 2. Gibt es eine Möglichkeit, git flow zu zeigen, welche Befehle hinter den Kulissen ausgeführt werden?
- 3. Updatedatenbank und Website hinter den Kulissen
- 4. Wie arbeiten Indizes hinter den Kulissen
- 5. Wie funktionieren Verschlüsse hinter den Kulissen? (C#)
- 6. Was sind Erlang Prozesse hinter den Kulissen?
- 7. Gibt es eine Möglichkeit, diese Lösung für eine Groß-und Kleinschreibung jQuery zu beschleunigen: contains selector?
- 8. Wäre es für einen JIT-Compiler möglich, GPU für bestimmte Vorgänge hinter den Kulissen zu verwenden?
- 9. Wie funktioniert die Mustererkennung hinter den Kulissen in F #?
- 10. Gibt es einen CSS "haschildren" Selektor?
- 11. Wie funktioniert die Reaktivität von Meteor hinter den Kulissen?
- 12. RabbitMQ Clustering und Mirror Queues Verhalten hinter den Kulissen
- 13. Hinter den Kulissen: Kerndaten Daten mit 31-Jahres-Offset gespeichert?
- 14. Wie funktioniert Boost Bind im Allgemeinen hinter den Kulissen?
- 15. Gibt es eine Möglichkeit, einen Sicherungspunkt ohne Transaktion zu erstellen?
- 16. Gibt es eine Möglichkeit, einen ImageSpan in einen TextView einzufügen, ohne den Text zu unterbrechen?
- 17. Gute Erklärung, wie Schienen hinter den Kulissen funktionieren?
- 18. Gibt es einen CSS-Selektor nicht gleich?
- 19. Gibt es einen CSS-Pseudo-Selektor für den Überlauf?
- 20. einfache Verwendung von .prototype, was passiert hinter den Kulissen?
- 21. Was passiert hinter den Kulissen, wenn Sie aspnet_regsql ausführen?
- 22. Wie funktionieren Ausnahmen (hinter den Kulissen) in C#
- 23. Was passiert hinter den Kulissen, wenn Sie super() verwenden
- 24. Wie funktioniert HashSet1.retainAll (HashSet2); Hinter den Kulissen arbeiten?
- 25. Kann jemand erklären, was hinter den Kulissen passiert?
- 26. Wie funktioniert HtmlHelper.AnonymousObjectToHtmlAttributes hinter den Kulissen? (Methode nennt sich selbst)
- 27. Gibt es eine einfache Möglichkeit, mit Open MPI zu klingeln?
- 28. jQuery: Gibt es eine Möglichkeit, einen rekursiven untergeordneten Selektor zu erstellen?
- 29. Gibt es eine Möglichkeit, den Befehl "sys.list_modules" ohne einen Diener auszuführen?
- 30. Gibt es eine Möglichkeit, einen Subprozess mit Pydev zu debuggen?
Also, ungefähr, '@selector (popViewControllerAnimated:)' ist ungefähr das gleiche wie '(SEL *) popViewControllerAnimated:'? –
Es ist nur 'SEL', nicht' SEL * ', aber das wäre im Grunde wahr, wenn letzteres eine legale Syntax wäre. Es ist so, als würde man sagen, dass '@" foo "' dasselbe ist wie '(NSString *) foo'. Für eine grob genug Version von True, das stimmt. –