请考虑这个简单的例子:
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"BLOCK!!!");
});
while (YES)
{
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1]];
NSLog(@"RUN LOOP");
}
});
}
传递给第二个调用(3 秒)的块dispatch_after
不会被触发。但是,如果我不使用第一个dispatch_after
(2 秒),那么它会按预期工作。为什么?
我知道,如果我删除了 while 循环并NSRunLoop
在里面运行,那么它可以工作,但我需要那里的循环