Very short trick: fermare NSTimer

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];
}

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
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA