美文网首页
GCD常用方法总结

GCD常用方法总结

作者: 流年VV | 来源:发表于2017-07-24 10:50 被阅读9次

常用操作
// 1.后台执行:

 dispatch_async(dispatch_get_global_queue(0, 0), ^{ 
      // something 
 }); 

//2. 主线程执行:

 dispatch_async(dispatch_get_main_queue(), ^{ 
      // something 
 }); 

//3. 一次性执行:

 static dispatch_once_t onceToken; 
 dispatch_once(&onceToken, ^{ 
     // code to be executed once 
 }); 

//4. 延迟2秒执行:

  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)),       dispatch_get_main_queue(), ^{
            // code to be executed after a specified delay
        });

其他高级用法
//5.单个页面多个网络请求的情况,需要监听所有网络请求结束后刷新UI

  dispatch_group_t group = dispatch_group_create();
  dispatch_queue_t serialQueue = dispatch_queue_create("com.wzb.test.www", DISPATCH_QUEUE_SERIAL);
  dispatch_group_enter(group);
  dispatch_group_async(group, serialQueue, ^{
      // 网络请求一
      [WebClick getDataSuccess:^(ResponseModel *model) {
          dispatch_group_leave(group);
      } failure:^(NSString *err) {
          dispatch_group_leave(group);
      }];
  });
  dispatch_group_enter(group);
  dispatch_group_async(group, serialQueue, ^{
      // 网络请求二
      [WebClick getDataSuccess:getBigTypeRM onSuccess:^(ResponseModel *model) {
          dispatch_group_leave(group);
      }                                  failure:^(NSString *errorString) {
          dispatch_group_leave(group);
      }];
  });
  dispatch_group_enter(group);
  dispatch_group_async(group, serialQueue, ^{
      // 网络请求三
      [WebClick getDataSuccess:^{
          dispatch_group_leave(group);
      } failure:^(NSString *errorString) {
          dispatch_group_leave(group);
      }];
  });
  // 所有网络请求结束后会来到这个方法
  dispatch_group_notify(group, serialQueue, ^{
      dispatch_async(dispatch_get_global_queue(0, 0), ^{
          dispatch_async(dispatch_get_main_queue(), ^{
              // 刷新UI
          });
      });
  });

//6、dispatch_barrier_async的使用,dispatch_barrier_async是在前面的任务执行结束后它才执行,而且它后面的任务等它执行完成之后才会执行

    dispatch_queue_t queue = dispatch_queue_create("create_asy_queue", DISPATCH_QUEUE_CONCURRENT);
    dispatch_async(queue, ^{
        NSLog(@"dispatch_async1");
    });
    dispatch_async(queue, ^{
        NSLog(@"dispatch_async2");
    });
    dispatch_barrier_async(queue, ^{
        NSLog(@"dispatch_barrier_async");
        dispatch_async(dispatch_get_main_queue(), ^{
            NSLog(@"刷新界面");
        });
    });
    dispatch_async(queue, ^{
        [NSThread sleepForTimeInterval:1];
        NSLog(@"dispatch_async3");
    });

//7、GCD的另一个用处是可以让程序在后台较长久的运行。
在没有使用GCD时,当app被按home键退出后,app仅有最多5秒钟的时候做一些保存或清理资源的工作。但是在使用GCD后,app最多有10分钟的时间在后台长久运行。这个时间可以用来做清理本地缓存,发送统计数据等工作。
让程序在后台长久运行的示例代码如下:

  // AppDelegate.h文件
 @property (assign, nonatomic) UIBackgroundTaskIdentifier backgroundUpdateTask;
// AppDelegate.m文件
 -(void)applicationDidEnterBackground:(UIApplication *)application {
        [self beingBackgroundUpdateTask];
        // 在这里加上你需要长久运行的代码
        [self endBackgroundUpdateTask];
    }
   -(void)beingBackgroundUpdateTask {
        self.backgroundUpdateTask = [[UIApplication sharedApplication]       beginBackgroundTaskWithExpirationHandler:^{
            [self endBackgroundUpdateTask];
        }];
    }
 -(void)endBackgroundUpdateTask {
        [[UIApplication sharedApplication] endBackgroundTask: self.backgroundUpdateTask];
        self.backgroundUpdateTask = UIBackgroundTaskInvalid;
   }

相关文章

  • GCD常用方法总结

    常用操作// 1.后台执行: //2. 主线程执行: //3. 一次性执行: //4. 延迟2秒执行: 其他高级用...

  • GCD常用方法总结

    GCD是异步执行任务的技术支之一,开发者只需要将想要执行的block任务添加到适当的Dispatch Queue(...

  • iOS多线程GCD使用及总结

    这篇文章对iOS的多线程技术GCD的常用方法做了总结另一篇NSOperation在这里本文代码 - GCD: 简介...

  • GCD常用方法之总结

    参考文章:http://www.jianshu.com/p/2d57c72016c6 1 开启多线程的方法 Thr...

  • OC 多线程:NSThread,GCD,NSOperation

    OC 常用的多线程实现方法有: NSThread GCD NSOperation 下面逐一总结一下。 NSThre...

  • iOS NSOperation学习及总结

    这篇文章对iOS多线程技术NSOperation的常用方法做了简单总结GCD请见这篇本文代码 NSOperatio...

  • GCD 常用总结

    什么是GCD? GCD全称为Grand Central Dispatch,是libdispatch的市场名称,而l...

  • GCD常用总结

    前言:从毕业到这家公司实习转正已经有一年多了,iOS开发这条路感觉真不好走,不管怎么样还得坚持学习,希望能和大家一...

  • GCD常用总结

    线程通讯 一次性代码 延迟执行 栅栏函数 (void)viewDidLoad {[super viewDidLoa...

  • GCD常用方法

网友评论

      本文标题:GCD常用方法总结

      本文链接:https://www.haomeiwen.com/subject/zyavkxtx.html