L’uso dei timers (NSTimer) nello sviluppo di applicazioni per Apple iPhone è molto frequente e non solo nella realizzazione di giochi. Uno dei problemi con cui ci si può scontrare è l’asincronicità del timer stesso, che può portare, durante l’arresto di uno o più timer, al crash della nostra applicazione. Quando si vuole fermare uno o più timer, nei casi in cui repeats è impostato a YES, si invoca la invalidate che, appunto, arresta il timer. Ad esempio il codice qui sotto attiva un timer che richiama il metodo myTimerMethod ogni 5 secondi:
1 2 3 4 5 6 7 8 9 10 11 12 | // // myTimer è definita come globale // myTimer = [NSTimer scheduledTimerWithTimeInterval: 5.0 target:self selector:@selector(myTimerMethod) userInfo:nil repeats:YES]; // - (void) myTimerMethod { // do ... } |
Se volessimo bloccare il timer avremmo:
1 | [myTimer invalidate]; |
Tuttavia “invalidando” il timer rendiamo “pericolosa” anche la variabile – globale – myTimer. Così il metodo migliore – e sicuro – per arrestare un timer potrebbe essere:
1 2 3 4 | if( myTimer != nil) { [myTimer invalidate]; myTimer = nil; } |
Questo procedimento può risultare utile anche per reimpostare un timer (globale):
1 2 3 4 5 6 7 8 9 10 | if( myTimer != nil) { [myTimer invalidate]; myTimer = nil; // reimposto il timer a 25 secondi myTimer = [NSTimer scheduledTimerWithTimeInterval: 25.0 target:self selector:@selector(myTimerMethod) userInfo:nil repeats:YES]; } |








11
Non ci sono commenti per questo Post
Lascia un commento