Use dos puntos: o no con selectores

Me preguntaba: ¿cuál es la diferencia entre escribir un nombre de selector sin dos puntos? @selector(mySelector)y @selector(mySelector:) con el colon?

Como en:

UIBarButtonItem *addButton = [[UIBarButtonItem alloc]initWith... 
                                                       target:self
                                                       action:@selector(addAction:)];

No puedo encontrar otro ejemplo sin los dos puntos, pero estoy bastante seguro de que ya he visto algunos de ellos.

preguntado el 05 de septiembre de 11 a las 16:09

Dos puntos significa que hay un parámetro, sin dos puntos significa que no hay ningún parámetro después de esta pieza. -

2 Respuestas

Se necesitan dos puntos después del nombre del método. si y solo si el método toma un argumento.

Sin parámetros de función:

-(void)addAction {}

// Use ...@selector(addAction)...

Tiene parámetro:

-(void)addAction:(id)info {}

// Use ...@selector(addAction:)...

Respondido el 05 de Septiembre de 11 a las 20:09

En ciertos casos, el número de dos puntos puede determinar los argumentos. Por ejemplo, si pasa un método de acción con dos puntos, enviará el sender como primer argumento. Si pasa un selector con dos dos puntos, obtendrá el event así como. Sin dos puntos significa, obviamente, sin argumentos.

Respondido el 05 de Septiembre de 11 a las 20:09

¿En qué casos el número de dos puntos no determina el número de argumentos? - usuario557219

Sé que lo hace en el caso de target-action, pero estoy pensando que el método simple 'performSelector' (no los que toman argumentos) podría tener un problema con eso; en el mejor de los casos, pasaría nulos argumentos. - FeifanZ

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.