Very short trick: fermare NSTimer

martedì 16 giugno, 2009

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:

Objective-C:
  1. //
  2. // myTimer è definita come globale
  3. //
  4. myTimer = [NSTimer scheduledTimerWithTimeInterval: 5.0
  5.                    target:self
  6.                    selector:@selector(myTimerMethod)
  7.                    userInfo:nil
  8.                    repeats:YES];
  9. //
  10. - (void) myTimerMethod {
  11.     // do ...
  12. }

Se volessimo bloccare il timer avremmo:

Objective-C:
  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:

Objective-C:
  1. if( myTimer != nil) {
  2.     [myTimer invalidate];
  3.     myTimer = nil;
  4. }

Questo procedimento può risultare utile anche per reimpostare un timer (globale):

Objective-C:
  1. if( myTimer != nil) {
  2.     [myTimer invalidate];
  3.     myTimer = nil;
  4.     // reimposto il timer a 25 secondi
  5.     myTimer = [NSTimer scheduledTimerWithTimeInterval: 25.0
  6.                        target:self
  7.                        selector:@selector(myTimerMethod)
  8.                        userInfo:nil
  9.                        repeats:YES];
  10. }

Post correlati

Questo articolo ti è stato utile?: Per nientePocoAbbastanzaMoltoMoltissimo
Loading ... Loading ...

Non ci sono commenti per questo Post

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre>         // blocco generico
[code][/code]       // blocco generico
[as][/as]           // Actionscript
[css][/css]         // CSS Style Sheet
[html][/html]       // HTML
[js][/js]           // Javascript
[objc][/objc]       // Objective-C
[php][/php]         // PHP
[sql][/sql]         // SQL