I know this is not a strong question but I have to clear my mind on this concept.
I have defined myBlock
as follows.
void(^myBlock)(void) = ^{
for(int i = 0;i < 10 ; i++)
{
NSLog(@"%d and current queue = %@",i,[NSThread currentThread]);
}
};
Now In viewDidLoad
method when I uses the dispatch_sync()
method independently on main queue then the main queue gets blocked.
Here is the Sample.
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_main_queue();
dispatch_sync(queue,myBlock);
}
But But, when I use the same dispatch_sync()
function on main thread Inside a block of dispatch_async()
function which is fired on concurrent queue then the main thread does not blocked.
Here is the sample.
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(queue,^{
dispatch_sync(dispatch_get_main_queue(),myBlock);
});
}
I am not clear why this is happening? Why main thread blocked when calling dispatch_sync()
independently?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…