2012-05-03 27 views
5

he creado un hilo en xcode y he dado el nombre de la función para llamar desde ese hilo. pero mi problema es que el nombre de la función que se da a llamar no está siendo llamado (llegó a conocer cuando se ponen un punto de interrupción en esa función)llamar a una función usando hilo en xcode

código:

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

y más tarde he intentado éste también :

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

anterior func1 es el nombre de la función que se va a llamar.

manera puede alguien por favor dígame cómo crear el hilo y llamar desde allí .... func1

Respuesta

16

En el primer ejemplo de código, no parece que esté creando un nuevo hilo. Crea una variable myThread vacía y luego llama al start, pero esto solo dará como resultado que start se envíe al nil. La variable de subproceso vacío se envía luego al método performSelector:onThread:withObject:waitUntilDone:, que presumiblemente no hará nada.

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

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

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

gracias por responder, pero algunas veces se necesita el hilo principal, que no quiero ... –

+0

Me gustaría saber cualquier información que tenga sobre 'performSelectorInBackground: withObject:' utilizando el hilo principal . La documentación de Apple dice: "Este método crea un nuevo hilo en su aplicación, colocando su aplicación en modo multiproceso si no fuera así". Si tiene información que muestra que a veces usa el hilo principal, me gustaría verla. – mttrb

+0

siento que la acción no estaba teniendo lugar en el hilo principal, ya que después de la función 1 '' 'está allí, no estaba funcionando 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 su respuesta ...... –

3

intente lo siguiente si funciona:

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

Puesto que usted no está de paso de cualquier objeto Para su "func1" (también conocido como: su método no tiene parámetros) no necesita poner ":" después de su nombre.

0

Si su func1 acepta un argumento. Entonces definitivamente tiene que funcionar con el segundo enfoque que usaste. Puede ser que tu fuc1 no tenga un argumento formal y sigas llamando al selector como este @selector (fuc1 :) y pasando el objeto como un nil. así que puede ser debido a esta razón, no está funcionando. Puede ser una razón. solo inténtalo si no.

+0

Cuando esté utilizando cualquier objeto de cualquier clase, nunca olvide asignar la memoria, como lo hizo en su primer acercamiento. – iDevAmit

Cuestiones relacionadas