我有一些代码可以安排一个计时器,然后阻止这样的主线程:
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)运行它时,计时器永远不会触发,主线程永远被阻塞。这里的问题真的是计时器吗?是线程吗?这是阻止和解锁主线程的错误方法吗?
答案 0 :(得分:0)
如果使用这种方式创建计时器,则应该调用 [计时器火]