llamar a una función usando hilo en xcode

He creado un hilo en xcode y he dado el nombre de la función para que se llame desde ese hilo. pero mi problema es que el nombre de la función que se da para llamar no se está llamando (me di cuenta cuando se puso un punto de interrupción en esa función)

código:

 NSThread* myThread; 
 [myThread start]; 
 [self performSelector:@selector(func1:) onThread:myThread withObject:nil waitUntilDone:false]

y luego probé este también:

NSThread* myThread = [[NSThread alloc] initWithTarget:self selector:@selector(func1:)object:nil];
[myThread start]; 

arriba func1 es el nombre de la función a llamar.

Entonces, ¿alguien puede decirme cómo crear el hilo y llamar a func1 desde allí?

preguntado el 03 de mayo de 12 a las 08:05

3 Respuestas

En su primer ejemplo de código, no parece que realmente esté creando un nuevo hilo. Creas un vacío myThread variable y luego llamar start en él, pero esto sólo resultará en start siendo enviado a nil. A continuación, la variable de subproceso vacío se envía al performSelector:onThread:withObject:waitUntilDone: método que presumiblemente no hará nada.

Deberá crear correctamente un hilo antes de poder ejecutar algo en él usando performSelector:onThread:withObject:waitUntilDone:.

Alternativamente, sería mucho más fácil, suponiendo que no le importe en qué subproceso de fondo se ejecuta el método, simplemente usar performSelectorInBackground:withObject:. Por ejemplo:

[self performSelectorInBackground:@selector(func1:) withObject:nil];

contestado el 03 de mayo de 12 a las 13:05

gracias por responder, pero a veces toma el hilo principal, que no quiero... - Subrat nayak.

Me interesaría saber cualquier información que tengas sobre performSelectorInBackground:withObject: utilizando el hilo principal. La documentación de Apple dice "Este método crea un nuevo subproceso en su aplicación, poniendo su aplicación en modo multiproceso si aún no lo estaba". Si tiene información que muestra que a veces usa el hilo principal, me interesaría verla. - mttrb

lo siento, la acción no estaba teniendo lugar en el hilo principal, ya que después de la función 1, el ':' está allí, no se estaba ejecutando y pensé que estaba tomando el hilo principal. Pero ahora, cuando eliminé ':' (según la otra respuesta para esta pregunta) está funcionando bien... gracias por responder... - Subrat nayak.

Según tengo entendido, performSelectorInBackground: crea un subproceso de baja prioridad. Al menos NSThread o detachNewThreadSelector: ejecutar más rápido. - mojuba

Prueba lo siguiente si funciona:

[NSThread detachNewThreadSelector:@selector(func1) toTarget:self withObject:nil];

Como no está pasando ningún objeto a su "func1" (también conocido como: su método no tiene parámetros), no necesita poner el ":" después de su nombre.

respondido 15 mar '16, 21:03

Si su func1 acepta un argumento. Entonces definitivamente tiene que funcionar con el segundo enfoque que utilizó. Puede ser que su fuc1 no tenga un argumento formal y todavía esté llamando a un selector como este @selector(fuc1:) y pasando el objeto como nulo. por lo que puede deberse a esta razón por la que no está funcionando. Puede ser una razón. solo inténtalo si no.

respondido 15 mar '13, 05:03

Siempre que esté utilizando cualquier objeto de cualquier clase, nunca olvide asignar la memoria, como lo hizo en su primer enfoque. - iDevAmit

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