Ho letto molti articoli per comprendere la parola chiave @selector ma non ho ancora capito il suo scopo. Voglio solo chiedere perché abbiamo @selector.
Tutto ha a che fare con l'analisi del linguaggio C.
Di per sé, in un'espressione come [obj performSelector:someRandomSelector]'
il compilatore tratta i someRandomSelector
po 'come "espandere qualunque someRandomSelector
è - la valutazione delle espressioni, si occupano di #defines, che stabilisce un simbolo per dopo il collegamento, ecc ... - e qualunque che produce espansione meglio essere SEL.
Quindi, se si dovesse scrivere [obj performSelector:action]'
compilatore avrebbe alcun modo di sapere la differenza tra action
come variabile contenente un selettore potenzialmente volatile e action
essere il nome effettivo di un metodo su obj
.
@selector()
risolve questo creando un'aggiunta sintattica al linguaggio che valuta sempre un risultato SEL costante.
Storicamente, Objective-C è stato originariamente implementato come estensione diretta al preprocessore C. Tutte le varie aggiunte prefissate di @...
hanno reso l'implementazione molto più semplice in quanto sostanzialmente qualsiasi cosa preceduta da un @
era un Objective-Cism.
Questo perché in Objective-C che abbiamo di messaggi non metodo chiamante ... –
Perfettamente domanda valida e, finora, nessuna delle risposte tocca la vera ragione (anche se hanno tutte fornito buone ragioni per le quali i selettori vengono utilizzati in primo luogo. – bbum