2012-03-30 12 views
0

eine sehr einfache Verwendung von NSThread und NSTimer wie unten. Wenn der Benutzer auf eine Schaltfläche klickt, möchte ich @ "aaaaa" jede Sekunde drucken, aber @ "aaaaa" wird nur einmal gedruckt? Scheint, dass NSTimer nicht funktioniert ... HilfeNSTimer funktioniert nicht in einem NSThread?

//this method is connected to 'run' button in IB 
- (IBAction)begin1:(id)sender { 
    [NSThread detachNewThreadSelector:@selector(thread1) toTarget:self withObject:nil]; 
} 

-(void)thread1{ 
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:1 
                 target:self 
                selector:@selector(aaa) 
                userInfo:nil 
                repeats:YES]; 
    [timer fire]; 
} 

-(void)aaa{ 
    NSLog(@"aaaaa"); 
} 

Antwort

0

Sie behalten den Timer nicht bei. + (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)seconds target:(id)target selector:(SEL)aSelector userInfo:(id)userInfo repeats:(BOOL)repeats gibt einen automatisch freigegebenen NSTimer zurück, also sollten Sie ihn irgendwo behalten, wenn Sie sicherstellen wollen, dass er läuft, bis Sie ihm sagen, dass er aufhören soll.

+0

danke. scheint, habe ich auch den 'NSRunLoop' um NSTimer zu erstellen vermisst. –

+0

warum muss er es behalten? Er verwendet es nicht in einer anderen Funktion und es sollte praktikabel sein. Oder verwenden Sie ARC? – Gargo

0

In einer Laufschleife ist der Timer keine gültige Quelle, die ihn weiterlaufen lässt. Vermutlich sieht Ihre Ausführungsschleife, dass sie nichts zu tun hat, und beendet dann den Timer. Dies ist der Fall, wenn Ihre tatsächliche Implementierung wie beschrieben ist. Sie müssen also sicherstellen, dass die Ausführungsschleife des sekundären Threads fortgesetzt wird, damit der Timer weiter zündet, weil der Thread gerade beendet wird und den Timer jetzt mitnimmt.