[关闭]
@SanMao 2015-12-08T20:41:03.000000Z 字数 2254 阅读 1120

多线程补充

多线程


延迟执行delay

  1. #pragma mark - 延迟执行
  2. - (void)delay{
  3. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  4. NSLog(@"延时执行");
  5. NSLog(@"%@",[NSThread currentThread]);
  6. });
  7. }

一次性代码once

  1. #pragma mark - 只执行一次
  2. - (void)once{
  3. // 只执行1次的代码(这里面默认是线程安全的)
  4. static dispatch_once_t onceToken;
  5. dispatch_once(&onceToken, ^{
  6. NSLog(@"%@",[NSThread currentThread]);
  7. NSLog(@"执行了");
  8. });
  9. }

快速迭代apply

  1. #pragma mark - 快速迭代
  2. - (void)apply{
  3. // 获取来源文件夹路径和目的文件夹路径
  4. NSString *source = @"/Users/V/Desktop/source";
  5. NSString *destilation = @"/Users/V/Desktop/destilation";
  6. // 获取文件管理者
  7. NSFileManager *mgr = [NSFileManager defaultManager];
  8. // 获取来源文件夹中所有文件的名称
  9. NSArray *names = [mgr subpathsAtPath:source];
  10. // NSLog(@"%@",names);
  11. // 记录开始时间
  12. CFAbsoluteTime begin = CFAbsoluteTimeGetCurrent();
  13. // 快速迭代
  14. dispatch_apply(names.count, dispatch_get_global_queue(0, 0), ^(size_t index) {
  15. // 获取当前遍历到得文件的名称
  16. NSString *fileName = names[index];
  17. // 拼接源文件的文件的全路径
  18. NSString *souPath = [source stringByAppendingPathComponent:fileName];
  19. // 拼接目标文件夹的文件全路径
  20. NSString *desPath = [destilation stringByAppendingPathComponent:fileName];
  21. // 从源文件夹剪切文件到目标文件夹
  22. [mgr moveItemAtPath:souPath toPath:desPath error:nil];
  23. });
  24. // 记录结束的时间
  25. CFAbsoluteTime end = CFAbsoluteTimeGetCurrent();
  26. NSLog(@"总共耗时:%f",end - begin);
  27. }

栅栏barrier

  1. #pragma mark - 栅栏,栅栏之前的执行完了才能执行栅栏,栅栏执行完了才能执行栅栏之后的代码
  2. - (void)barrier{
  3. // 创建队列
  4. dispatch_queue_t queue = dispatch_queue_create("fsgergr", DISPATCH_QUEUE_CONCURRENT);
  5. // 添加任务
  6. dispatch_async(queue, ^{
  7. NSLog(@"1 -- %@",[NSThread currentThread]);
  8. });
  9. dispatch_async(queue, ^{
  10. NSLog(@"2 -- %@",[NSThread currentThread]);
  11. });
  12. dispatch_async(queue, ^{
  13. NSLog(@"3 -- %@",[NSThread currentThread]);
  14. });
  15. dispatch_barrier_async(queue, ^{
  16. NSLog(@"barrier -- %@",[NSThread currentThread]);
  17. });
  18. dispatch_async(queue, ^{
  19. NSLog(@"4 -- %@",[NSThread currentThread]);
  20. });
  21. dispatch_async(queue, ^{
  22. NSLog(@"5 -- %@",[NSThread currentThread]);
  23. });
  24. }

队列组group

  1. dispatch_group_t group = dispatch_group_create();
  2. dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  3. // 执行1个耗时的异步操作
  4. });
  5. dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
  6. // 执行1个耗时的异步操作
  7. });
  8. dispatch_group_notify(group, dispatch_get_main_queue(), ^{
  9. // 等前面的异步操作都执行完毕后,回到主线程...
  10. });
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注