我正在尝试将 NSTimer 安排在一个单独的线程上,这就是我的做法。
-(void) startSpinner {
#ifdef DEBUG_MODE
NSLog(@"Starting Spinner...");
#endif
self.spinnerThread = [[[NSThread alloc] initWithTarget:self selector:@selector(scheduleSpinner) object:nil] autorelease];
[spinnerThread start];
}
-(void) scheduleSpinner {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSTimer *_spinTimer = [NSTimer scheduledTimerWithTimeInterval:SPIN_FIRE_INTERVAL target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop addTimer:_spinTimer forMode:NSRunLoopCommonModes];
[runLoop addTimer:_spinTimer forMode:UITrackingRunLoopMode];
[runLoop run];
[pool release];
}
timerFireMethod 旋转我的微调器,当按下按钮(停止按钮)时,我使计时器无效并退出此方法中的线程。如果按下旋转按钮,我会在这里进行轮询。
问题是,我的 timerFireMethod 第一次被正确调用。Spinner 第一次旋转。但是当我停止我的微调器并重新启动它时,微调器不旋转。日志说第二次我的“startSpinner”方法被调用但“timerFireMethod”方法没有被调用。
更糟糕的是,微调器在模拟器上工作 5-6 次,在 2g 设备上工作 1 次,在最新的 ipod 上工作 4-5 次。它的随机。
这基本上是如何工作的?可能是什么问题呢?