dispatch_sync(dispatch_get_main_queue(), ^(){
NSLog(@"222");
});
在ios中是无法使用 dispatch_sync(dispatch_get_main_queue()
原因如下:
在ios使用 dispatch_sync(dispatch_get_main_queue()^(){block体});
dispath向主队列加一个同步的block;
此时主队列在等待 dispatch_sync(dispatch_get_main_queue(),^(){block体});执行
dispatch_sync在等待主队列执行完毕。
造成死锁。
所以在ios使用主队列 dispatch_get_main_queue() 时 应该使用异步执行
dispatch_async(dispatch_get_main_queue(), ^(){
NSLog(@"222");
});
dispatch_sync
则调用用 dispatch_sync的线程会等 dispatch_sync的对内容执行完再继续执行。
dispatch_async
调用dispatch_async的线程不会的等dispatch_async的内容,自己继续执行。
dispatch_sync/async(dispatch_get_main_queue(),^(){block体})
只是将block加入到队列。执行顺序按照队列顺序
sync/async的区别在于 调用diapatch的线程是否等待dispatch执行完。
相关推荐
本示例"ios demo,主队列,异步调度,手动创建线程,detachNewThreadSelector dispatch_get_main_queue"关注的是iOS中的四种主要线程管理方式:主队列、异步调度、detachNewThreadSelector以及dispatch_get_main_...
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行任务 }); ``` **异步与同步提交** - **异步任务**:不会阻塞当前线程,可以立即返回...
串行队列是一种只能处理一个任务的队列,可以由用户调用dispatch_queue_create创建。并行队列可以同时处理多个任务,通常使用系统预定义的并行队列,即全局队列(Global Concurrent Dispatch Queues)。主队列是一个...
#definedispatch_get_main_queue() \DISPATCH_GLOBAL_OBJECT(dispatch_queue_t, _dispatch_main_q) 可以看出,dispatch_get_main_queue也是一种dispatch_queue_t。 2)并行队列global dispatch queue,通过dispa
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ // 执行任务 }); ``` 2. **创建本地串行队列**: ```swift dispatch_queue_t queue ...
- 通过`dispatch_queue_create`创建自定义队列并使用`dispatch_async`异步执行任务。 - 使用`dispatch_get_main_queue`和`dispatch_get_global_queue`对比不同队列上的任务执行情况。 - `dispatch_after`的延时执行...
异步OC 用Objective-C重写... 代替熟悉的GCD语法: dispatch_async (dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0 ), ^{ NSLog ( @" A: This is run on the background " ); dispatch_async ( dis
dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); ``` 在获取到全局队列后,我们可以通过`dispatch_async`函数将任务添加到队列中,实现异步执行。下面是一个简单...
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // 这里的代码将在默认优先级的全局队列中异步执行 }); ``` 4. **主队列**:主队列是特殊的串行队列,所有的任务都会在主线程...
在这个例子中,`dispatch_get_main_queue()`会获取主线程的队列,而`dispatch_get_current_queue()`则获取当前线程的队列。`dispatch_sync`会将Block放入指定的队列并等待其执行完成。由于同步Block会阻塞调用它的...
- 有多个优先级可供选择,如` DISPATCH_QUEUE_PRIORITY_HIGH`、`DISPATCH_QUEUE_PRIORITY_DEFAULT`和`DISPATCH_QUEUE_PRIORITY_LOW`。 5. **GCD的时间控制**: - `dispatch_after()`函数允许在指定延迟后执行任务...
- 创建DispatchQueue:`dispatch_queue_create()`用于创建自定义队列,`dispatch_get_main_queue()`和`dispatch_get_global_queue()`获取主线程队列和全局并行队列。 - 异步/同步提交任务:`dispatch_async()`异步...
通过`dispatch_queue_create`函数可以创建自定义的队列,其第二个参数用于指定队列类型。例如: ```swift let serialQueue = dispatch_queue_create("com.example.SerialQueue", DISPATCH_QUEUE_SERIAL) let ...
dispatch_queue_t downloadQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); NSURL *imageURL = [NSURL URLWithString:@"http://example.com/image.jpg"]; NSMutableData *imageData = ...
- 自定义串行队列通过`dispatch_queue_create()`创建。 2. **提交任务**: - 使用`dispatch_async()`提交异步任务到队列。 - 使用`dispatch_sync()`提交同步任务到队列。 3. **延迟执行**: 可以使用`dispatch...
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ NSArray * array = @[@"0",@"1",@"2",@"3"];//本地图片数据 [banner ...
- 并行队列:`dispatch_queue_create("queueName", DISPATCH_QUEUE_CONCURRENT)` 2. 将任务添加到队列: - 异步任务:`dispatch_async(queue, block)` - 同步任务:`dispatch_sync(queue, block)` 3. 主队列:`...
使用`dispatch_get_main_queue()`获取主队列。 5. **全局队列**:GCD还预定义了一些全局并行队列,可直接使用,无需创建。它们按优先级分为四个级别:高、默认、低和后台。 6. **栅栏函数**(`dispatch_barrier_...
- 将任务提交到队列,比如全局并行队列:`dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ ... });` - 在任务的最后,离开调度组:`dispatch_group_leave(myGroup);` - 然后...