Dan*_*ark 12 grand-central-dispatch ios
这段代码
dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
NSLog(@"Main Thread? %d", [NSThread isMainThread]);
});
Run Code Online (Sandbox Code Playgroud)
表明我在主线程中.即使这样做:
queue = dispatch_queue_create("nonMainQueue", NULL);
Run Code Online (Sandbox Code Playgroud)
仍然报告说我在主队列中.这似乎是因为我正在使用dispatch sync.
这是否意味着我的代码与不使用dispatch_sync相同?另外:如果dispatch_sync什么都不做的话,那又有什么意义呢?
Ric*_*III 11
因为队列不是线程,为了检查您是否在主"队列"上,您必须使用不同的代码,类似于:
if (dispatch_get_current_queue() == dispatch_get_main_queue()) {
NSLog(@"On Main Thread!");
}
Run Code Online (Sandbox Code Playgroud)
请注意,dispatch_get_current_queue它已被弃用,并且可能会在以后的iOS/Mac OS版本中完全删除.
这是记录在案的行为.作为优化,传递给的块dispatch_sync在可能的情况下在当前线程上执行(几乎总是如此).
| 归档时间: |
|
| 查看次数: |
4500 次 |
| 最近记录: |