常用gcd-dispatch_async

线程异步处理后,主线程再处理

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
       NSLog(@"异步线程");
    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"异步主线程");
    });
});

延时处理

double delayInSeconds = 2.0;
  dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds*NSEC_PER_SEC));
  dispatch_after(popTime, dispatch_get_main_queue(), ^{
      NSLog(@"演示操作,主线程刷新");
  });

判断三个并发队列执行完毕的方法dispatch_group_notify

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_group_t group = dispatch_group_create();
  dispatch_group_async(group, queue, ^{
      NSLog(@"0");
  });
  dispatch_group_async(group, queue, ^{
      NSLog(@"1");
  });
  dispatch_group_async(group, queue, ^{
      NSLog(@"2");
  });
  dispatch_group_notify(group, dispatch_get_main_queue(), ^{
      NSLog(@"执行over");
  });

执行某个方法多少次数后,主线程才执行,dispatch_apply 遍历数组这个方法虽然会开启多个线程来遍历这个数组,但是在遍历完成之前会阻塞主线程。

NSArray *array = @[@"1",@"2",@"3",@"4",@"5",@"6",@"7",@"8",@"9",@"10"];
  dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
  dispatch_apply([array count], queue, ^(size_t index) {
      NSLog(@"%zu====%@",index,array[index]);
  });
  NSLog(@"阻塞");

计时器

dispatch_source_set_event_handler 计时器
__block int index = 0;
dispatch_source_t timer = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0, dispatch_get_main_queue());
dispatch_source_set_timer(timer, DISPATCH_TIME_NOW, 1.0 * NSEC_PER_SEC, 0.0 * NSEC_PER_SEC);
dispatch_source_set_event_handler(timer, ^{
NSLog(@"------ index == %d -------",index);
index++;
if (index > 20) {
dispatch_source_cancel(timer);
}
});
dispatch_source_set_cancel_handler(timer, ^{
NSLog(@"取消");
});
dispatch_resume(timer);

你可能感兴趣的:(常用gcd-dispatch_async)