2012-04-02 8 views
0

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

3

@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.

+0

Also, ungefähr, '@selector (popViewControllerAnimated:)' ist ungefähr das gleiche wie '(SEL *) popViewControllerAnimated:'? –

+0

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. –

2

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.

+0

Insbesondere werden '@ selector' Direktiven zur Kompilierzeit in SELs umgewandelt, während' NSSelectorFromString() 'eine normale Funktion ist, die zur Laufzeit aufgerufen wird. – Chuck

Verwandte Themen