我们知道 main_queue 是一个串行队列。没有真正的异步。</p>
- (void)someMethod{
dispatch_async(dispatch_get_main_queue(),^{
NSLog(@"main_async invoke");
});
NSLog(@"method invoke");
}
“方法调用”上面的代码将写在“main_async调用”之前。因为在main_queue中没有真正的异步。但下面的代码可能会说不:
- (void)someMethod{
__block BOOL flag=YES;
NSBlockOperation *blockOperation = [NSBlockOperation blockOperationWithBlock:^{
NSLog(@"blockOperation invoke");
[NSThread sleepForTimeInterval:4];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"main_async invoke");
flag=NO;
});
}];
[blockOperation start];
while (flag) {
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.5]];
}
NSLog(@"method invoke");
}
“方法调用”上面的代码将在“main_async 调用”之后编写,我认为这是因为“RunLoop”。有没有人可以解释这是为什么?