Pregunta sobre nsthread, xcode, ios, objective-c – llamar a una función usando hilo en xcode

5

He creado un subproceso en xcode y le he dado el nombre de la función para que se llame desde ese subproceso. pero mi problema es que el nombre de la función que se le da a la llamada no se llama (llegó a saber cuándo se puso un punto de interrupción en esa función)

código:

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

Y luego probé este también:

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

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

cualquiera puede decirme cómo crear el hilo y llamar a func1 desde allí ...

Tu respuesta

3   la respuesta
16

no parece que en realidad esté creando un nuevo hilo. Creas un vacíomyThread variable y luego llamarstart en él, pero esto sólo dará lugar astart siendo enviado anil. La variable de hilo vacío se envía a laperformSelector:onThread:withObject:waitUntilDone: Método que presumiblemente no hará nada.

Necesitará crear correctamente un hilo antes de poder ejecutar algo en él usandoperformSelector:onThread:withObject:waitUntilDone:.

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

<code>[self performSelectorInBackground:@selector(func1:) withObject:nil];
</code>
A mi entender, performSelectorInBackground: crea un hilo de baja prioridad. Al menos NSThread o detachNewThreadSelector: ejecuta más rápido. mojuba
Gracias por responder, pero algunas veces toma el hilo principal, que no quiero ... Subrat nayak.
Lo siento, la acción no se estaba llevando a cabo en el hilo principal, ya que después de la función ':' 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 la respuesta ... Subrat nayak.
Me interesaría saber cualquier información que tengas sobreperformSelectorInBackground:withObject: Usando 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 gustaría verlo. mttrb
3

<code>[NSThread detachNewThreadSelector:@selector(func1) toTarget:self withObject:nil];
</code>

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.

0

abajar con el segundo enfoque que usaste. Puede ser que su fuc1 no tenga un argumento formal y aún esté llamando al selector como este @selector (fuc1 :) y pasando el objeto como nulo. por lo que puede ser debido a esta razón no está funcionando. Puede ser una razón. sólo inténtalo si no.

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

Preguntas relacionadas