NSTimer不会通过代码优化来启动。工作正常没有

时间:2014-07-24 23:41:25

标签: ios objective-c multithreading timer nstimer

我有一些代码可以安排一个计时器,然后阻止这样的主线程:

self.waitingForCompletion = YES;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
    [[NSRunLoop currentRunLoop] run];
    NSTimer* timer = [NSTimer timerWithTimeInterval:2.f target:self selector:@selector(finishCompletionWait:) userInfo:nil repeats:NO];
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];
});

while(self.waitingForCompletion);

.
.
.

-(void)finishCompletionWait:(NSTimer*)timer {
    TFLog(@"Completion wait timer timed out");
    [timer invalidate];
    self.waitingForCompletion = NO;
}

当我在没有优化(-O0)的情况下运行它时,计时器触发并且主线程解除阻塞。当我用最快,最小的(-Os)运行它时,计时器永远不会触发,主线程永远被阻塞。这里的问题真的是计时器吗?是线程吗?这是阻止和解锁主线程的错误方法吗?

1 个答案:

答案 0 :(得分:0)

如果使用这种方式创建计时器,则应该调用 [计时器火]