Very short trick: fermare NSTimer
martedì 16 giugno, 2009L'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:
-
//
-
// myTimer è definita come globale
-
//
-
target:self
-
selector:@selector(myTimerMethod)
-
userInfo:nil
-
repeats:YES];
-
//
-
- (void) myTimerMethod {
-
// do ...
-
}
Se volessimo bloccare il timer avremmo:
-
[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:
-
if( myTimer != nil) {
-
[myTimer invalidate];
-
myTimer = nil;
-
}
Questo procedimento può risultare utile anche per reimpostare un timer (globale):
-
if( myTimer != nil) {
-
[myTimer invalidate];
-
myTimer = nil;
-
// reimposto il timer a 25 secondi
-
target:self
-
selector:@selector(myTimerMethod)
-
userInfo:nil
-
repeats:YES];
-
}










10

Non ci sono commenti per questo Post
Lascia un commento