从调度计时器的线程之外的其他线程调用setFireDate:是否被认为是线程安全的?我的意思是,我在一个新线程中分离了这个函数:
-(void)CFRunLoopTest {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
timer = [NSTimer timerWithTimeInterval:1 target:self selector:@selector(timerFireMethod:) userInfo:nil repeats:YES];
runLoop = CFRunLoopGetCurrent();
CFRunLoopAddTimer(runLoop, (CFRunLoopTimerRef)timer, kCFRunLoopCommonModes);
CFRunLoopRun();
[pool drain];
}我可以从主线程调用[timer setFireDate:]吗?我没有在文档中找到任何禁止它的东西...
发布于 2011-05-26 19:47:34
setFireDate:方法的NSTimer参考中有一条说明:
您可能会在尚未触发的非重复计时器上调用此方法,尽管您应该始终从该计时器附加的线程执行此操作,以避免潜在的争用条件。
还可以看看下面的Discussion是否有帮助。
发布于 2011-05-26 19:48:33
为什么不在主线程上运行计时器呢?我不明白为什么你需要在一个单独的线程中运行它。您可以始终使用timerFireMethod:如果它消耗大量时间,只需使用performSelectorInBackground:withObject:运行适当的方法即可生成一个新线程。
EDIT:,所以文档实际上说从另一个线程调用[timer setFireDate:]是不安全的。然而,我的建议仍然有效。
https://stackoverflow.com/questions/6137785
复制相似问题