He leído muchos artículos para comprender la palabra clave @selector pero aún no entiendo su propósito. Solo quiero preguntar por qué tenemos @selector.
Todo tiene que ver con el análisis del lenguaje C.
Por su parte, en una expresión como [obj performSelector:someRandomSelector]'
el compilador trata someRandomSelector
poco como "ampliar lo someRandomSelector
es - la evaluación de expresiones, que trata de #defines, se establece un símbolo para vincular más tarde, etc ... - y cualquiera que sea que los rendimientos de expansión mejor que sea un SEL.
por lo tanto, si tuviera que escribir [obj performSelector:action]'
el compilador no tienen manera de saber la diferencia entre action
como una variable que contiene un selector potencialmente volátil y action
ser el nombre real de un método de obj
.
@selector()
resuelve esto creando una adición sintáctica al lenguaje que siempre se evalúa como un resultado de SEL constante.
Históricamente, Objective-C se implementó originalmente como una extensión directa al preprocesador C. Todas las diversas adiciones prefijadas de @...
hicieron que la implementación fuera mucho más sencilla, ya que básicamente cualquier cosa precedida por un @
era un Objective-Cism.
Esto se debe a que en Objective-C tenemos el paso de mensajes no método de llamada ... –
Perfectamente una pregunta válida y, hasta el momento, ninguna de las respuestas toca el motivo real (aunque todos han dado buenas razones por las cuales se utilizan selectores en primer lugar). – bbum