Pregunta

Soy nuevo en Objective C, y el desarrollo de Mac ... Parece que puedo usar la API de hilos POSIX en mi aplicación .. Es esta la forma recomendada? O es su alguna API de Apple que debería usar para el mutex, variables de condición y los hilos en su lugar?

debo añadir que estoy desarrollando para el iPhone.

Me gustaría añadir exactamente lo que estoy tratando de hacer. Básicamente, CoreLocation es asíncrona ... te dicen que para empezar la actualización, y entonces, sólo se llama a un método de actualización en la que periódicamente ...

El problema que tengo es que necesito otro hilo para bloquear hasta que se produzca una actualización ... ¿Cómo puedo hacer que el bloque principal subproceso de la aplicación hasta que se produzca al menos una actualización CoreLocation? Es su un NSConditionVariable? :)

¿Fue útil?

Solución

En lugar de bloquear la interfaz de usuario, haciéndola pasar, sugeriría que muestran algún tipo de pantalla de carga hasta que se ha recibido su primera actualización. El podría sería algo como esto:

- (void)viewDidLoad {
    ...
    [myCLLocationManager beginUpdates];
    [self showLoadingIndicator];
    ....
}

- (void)locationManager:(CLLocationManager *)manager didReceiveUpdates {
    [self hideLoadingIndicator];
    // Additionally load the rest of your UI here, if you haven't already
}

No me cita en los método llama pie de la letra, pero eso es lo que sugiero resolver su problema, en esencia.

Otros consejos

Me gustaría sugerir una manera aún más fácil quedar atrapado en hilos es utilizar la siguiente llamada:

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

Esto creará automáticamente un nuevo hilo de fondo para que se ejecute en cierto asegurarse de que la siguiente dentro de su método de fondo:.

-(void) myMethod {
   NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
   // code you want to run in background thread;
   [pool drain];
}

Esto es necesario porque no hay una piscina autorelease predeterminado establecido para todos los hilos, excepto la principal.

Por último, hablando de bloquear el hilo principal, se puede utilizar el siguiente de su subproceso de fondo para hacer esto:

[self performSelectorOnMainThread:(@selector(myOtherMethod)) withObject:nil waitUntilDone:YES];

El tercer parámetro opcional se puede sostener el hilo principal para ti, si quieres que lo haga.

Espero que ayude!

Depende de lo que está tratando de hacer, pero me gustaría comenzar con NSOperation y NSOperationQueue. Esto hace que sea bastante simple a mano de tareas en segundo plano. Echar un vistazo a entrada del blog de Dave Dribin en NSOperation concurrencia, así: http://www.dribin.org/dave/blog/archives/2009/05/05/concurrent_operations/

Si hay un objeto NSCondition, y es probable que haga exactamente lo que quiere para el escenario CoreLocation usted ha mencionado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top