Mi clase de modelo tiene que obtener algunos datos de internet. Así que decidí ejecutarlo en otro hilo para que el ui no se congele. Así que cuando un objeto quiere algunos datos que pide primero el modelo usando un método de este tipo:Método de ejecución en el hilo principal de otro hilo
- (void)giveMeSomeData:(id)object withLabel:(id)label {
objectAsking= object;
theLabel= label;
NSThread* thread= [[NSThread alloc] initWithTarget:self selector:@selector(getTheDataFromInternet) object:nil];
[thread start];
}
- (void)getTheDataFromInternet {
//getting data...
theData= [dataFromInternet retain]; //this is the data the object asked for
[self returnObjectToAsker];
}
- (void)returnObjectToAsker {
[objectAsking receiveData:theData withLabel:theLabel];
}
Como sigo siendo un novato, me puede decir si es un buen patrón?
Gracias!
No olvide liberar lo que crea, de acuerdo con las reglas de administración de memoria. http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html A partir del código que mostró, debe ser propietario y, si no se ejecuta bajo GC, eventualmente lanzar tanto 'thread' como' theData'. –
Además, parece que 'getTheDataFromInternet' lo hace de forma síncrona. No hagas eso: bloquearás tu IU durante tantos milisegundos/segundos/minutos/horas/días para obtener los datos. No importa cuán pequeño sea, o cuán asombrosa sea su propia conexión a Internet: sus usuarios verán su aplicación bloquearse mientras espera la información. En su lugar, cree (y posea) un NSURLConnection para recibir de forma asíncrona: http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/ Informe el progreso utilizando (al menos) un NSProgressIndicator. –
Por supuesto, decidí no escribir estas líneas en aras de la claridad;) –