2012-07-18 13 views
7

Estoy un poco confundido con respecto a performSelector. Ya estoy buscando en Google. pero no está claro para mí cualquiera puede explicar el rol de performSelector.qué es el uso de performSelector en iOS

gracias

[self btnClicked]; 

y

[self performSelector:@selector(btnClicked)]; 


-(void)btnClicked 
{ 

    NSLog(@"Method Called"; 
} 

tanto se Woking bien para mí. ¿Cuál es la diferencia entre estos dos? [self btnClicked] y [self performSelector:@selector(btnClicked)];

Respuesta

10

Los dos son bastante idénticos cuando se usan como lo ha demostrado, pero este último tiene la ventaja de que puede determinar dinámicamente a qué selector llamar en tiempo de ejecución.

SEL selector = [self gimmeASelectorToCall]; 
[self performSelector: selector]; 

[Source]

+0

gracias por la respuesta rápida .. – QueueOverFlow

1

performSelector llama a un método que ha sido declarado e implementado en la clase. Se usa cuando necesita adjuntar una acción en código a un evento.

4

Un objeto selector le permite llamar a un método que no conoce en tiempo de compilación. Solo necesita saber el nombre de un método como una cadena para llamarlo.

Cuando se conoce el nombre del método que está llamando en tiempo de compilación, usar selectores es contraproducente: el código se vuelve menos legible sin ninguna ventaja aparente. Cuando está escribiendo una biblioteca que necesita llamar a métodos en otro código que se compila por separado de la biblioteca, los selectores proporcionan una manera de desacoplar las dos partes del código.

Por ejemplo, si está escribiendo una clase de temporizador que puede devolverle la llamada cuando termina un intervalo de tiempo, su temporizador no conoce el nombre de la función que necesita llamar, por lo que no puede escribir algo como esto:

// We do not know if the function is called intervalHasExpired or something else 
[target intervalHasExpired]; 

Pero si le da un selector a su temporizador, el temporizador podría devolverle la llamada.

[myTimer scheduleWithTarget:self andSelector:@selector(myCompletion)]; 
2

PerformSelector básicamente le permite decidir qué mensaje que pase durante el tiempo de ejecución (a finales de la unión), en contraposición a lenguas como el llano C. Si se conoce el nombre de un método en una clase C objetivo, puede utilizar

NSSelectorFromString() 

Para convertir una cadena en un selector, y haga que su clase llame a ese selector utilizando performSelector. De esta forma, puede elegir diferentes funciones para llamar durante el tiempo de ejecución. Incluso puede seleccionar a qué función llamar utilizando un archivo de configuración.

8

Apple doc es tu amigo.

NSObject Protocol Reference

Se

envía un mensaje especificado al receptor y devuelve el resultado de el mensaje.

En particular:

El performSelector: método es equivalente a enviar un mensaje de aSelector directamente al receptor. Por ejemplo, los tres de los siguientes mensajes hacen lo mismo:

id myClone = [anObject copy]; 
id myClone = [anObject performSelector:@selector(copy)]; 
id myClone = [anObject performSelector:sel_getUid("copy")]; 

Sin embargo, el performSelector: método le permite enviar mensajes que no se determinan hasta que el tiempo de ejecución. Un selector de variables se puede pasar como el argumento:

SEL myMethod = findTheAppropriateSelectorForTheCurrentSituation(); 
[anObject performSelector:myMethod]; 

El argumento aSelector debe identificar un método que no tiene argumentos. Para los métodos que devuelven algo que no sea un objeto, use NSInvocation.

Espero que ayude.

+0

gracias. por respuesta. – QueueOverFlow

+0

@stackBlue De nada. Marqué en negrita las partes principales del documento de Apple. Vota si quieres :-) Saludos. –

Cuestiones relacionadas