请考虑以下简单示例:
- (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)),^{
NSLog(@"BLOCK!!!");
});
while (YES)
{
[[NSRunLoop currentRunLoop] runmode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:1]];
NSLog(@"RUN LOOP");
}
});
}
传递到dispatch_after
的第二个调用(3秒)中的块未触发。但是,如果我不使用前dispatch_after
(2秒),那么它将按预期工作。为什么?
我知道,如果我在内部运行NSRunLoop
的情况下删除while循环,则它可以正常工作,但是我需要在那儿循环