我知道關於這個主題的許多問題,因爲我以前曾問過一個問題,現在我的問題似乎與線程部分更相關。我有以下2種方法。Threaded NSTimer
-(void) restartTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
time = 31;
NSLog(@"calling restart timer");
[self performSelectorOnMainThread:@selector(timerImageUpdate) withObject:nil waitUntilDone:NO];
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
-(void) resumeTimer {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
self.timer = [NSTimer scheduledTimerWithTimeInterval:1.
target:self
selector:@selector(dim)
userInfo:nil
repeats:YES];
NSLog(@"calling resume timer");
[[NSRunLoop currentRunLoop] addTimer:self.timer forMode:NSDefaultRunLoopMode];
[[NSRunLoop currentRunLoop] run];
[pool drain];
}
當遊戲開始時會調用restartTimer函數。這工作正常,計時器很好地啓動昏暗選擇器。當用戶快速連續點擊我的跳過按鈕時會出現問題。 [skip]更新一個MKMapView,並在委託方法mapdidfinishloading中加入下面的命令: [NSThread detachNewThreadSelector:@selector(restartTimer)toTarget:self withObject:nil];
當發生這種情況時,似乎有幾個定時器被創建,因此我的調光功能被調用的太頻繁,給出了運行速度非常快的單個定時器的外觀?使用輔助線程啓動和重新啓動計時器的最佳方法是什麼?注意,這個問題似乎只在重複快速按下跳過按鈕時纔會發生,而如果只是一次又一次地按下,它可以正常工作嗎?
任何人有任何想法?非常感謝
朱
感謝您的幫助。這可能工作,但我真正的問題是爲什麼計時器不失效? Timer是一個類屬性,我在輔助線程上創建它。當涉及到無效這是在主線程完成,這可能是原因? – Jules 2010-07-01 09:36:32