了解 dispatch_sync
Understanding dispatch_sync
请考虑以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i; i < 100 ; i++) {
NSLog(@"%i", i);
}
});
NSLog(@"Main thread code");
}
为什么它的唯一输出是 - 2016-01-26 16:15:28.842 Test[1051:35933] Main thread code
?
我的意思是,全局队列中的代码永远不会执行,为什么?我只希望它同步执行。当然我可以很容易地写 dispatch_async
,但我只是好奇为什么上面的代码不起作用,除了 2016-01-26 16:15:28.842 Test[1051:35933] Main thread code
?
不输出任何东西
问题出在
for (int i; i < 100 ; i++)
对于上面的代码值 i = 72339625 所以条件不满足并且不进入循环
解决方案:初始化 i 的值,
for (int i = 0 ; i < 100 ; i++)
请考虑以下代码:
- (void)viewDidLoad {
[super viewDidLoad];
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
for (int i; i < 100 ; i++) {
NSLog(@"%i", i);
}
});
NSLog(@"Main thread code");
}
为什么它的唯一输出是 - 2016-01-26 16:15:28.842 Test[1051:35933] Main thread code
?
我的意思是,全局队列中的代码永远不会执行,为什么?我只希望它同步执行。当然我可以很容易地写 dispatch_async
,但我只是好奇为什么上面的代码不起作用,除了 2016-01-26 16:15:28.842 Test[1051:35933] Main thread code
?
问题出在
for (int i; i < 100 ; i++)
对于上面的代码值 i = 72339625 所以条件不满足并且不进入循环
解决方案:初始化 i 的值,
for (int i = 0 ; i < 100 ; i++)