iOSUna delle necessità che si presentano spesso durante lo sviluppo di applicazioni iOS è quella relativa all’esecuzione di alcune funzioni in automatico dopo che è trascorso un intervallo di tempo.

L’SDK di Apple mette a disposizione diverse soluzioni, adatte a tutti gli scopi, alcune molto semplici ed immediate, anche se poco flessibili, altre molto più complesse ma dotate di una flessibilità notevole.

Nel caso in cui ci si trovi a dover eseguire una funzione al termine di un intervallo di tempo, per una singola volta, sicuramente il primo metodo da usare è performSelector:withObject:afterDelay:

Questo metodo come lascia intuire la sua firma, si occupa di chiamare un metodo dopo che l’intervallo di tempo specificato è trascorso, l’intervallo di tempo è espresso in secondi o frazioni.

Il metodo invocato può accettare 0 o al massimo 1 parametro di tipo NSObject o suoi discendenti. Vediamo quindi come funziona passando come parametro una stringa:

NSString *testo = @"Stringa da loggare";
NSLog(@"Chiamata la funzione con delay 1 secondo");
[self performSelector:@selector(loggaStringa:) withObject:testo afterDelay:1.0f];
.
.
.
 - (void)loggaStringa:(id)parametro {
NSString *logString = (NSString *)parametro;
NSLog (@"Stringa ricevuta: %@",logString);
}

 

Nel testo di log vedremo che il log della stringa ricevuta verrà stampato dopo un secondo rispetto a quello di dichiarazione di chiamata di funzione.

Questo metodo presenta una, apparente, grossa limitazione, in quanto è possibile chiamare solo funzioni con 0 o al massimo 1 parametro. Nella prossima tip vedremo come aggirare il problema.

Roberto S.



Related Posts Plugin for WordPress, Blogger...

Tagged with:  
Wordpress Code Snippet by Allan Collins