zoukankan      html  css  js  c++  java
  • iOS开发进阶(iOS开发实战:GCD)summary

    多线程:我们一般把耗时操作放到子线程来执行,然后主线程只做UI操作

    GCD是苹果开发的一个多核编程的解决办法,和(NSThread、NSOperationQueue、NSInvocationOperation)多线程技术方案相比,使用起来更加简单和方便

    //网络显示图片

      self.indicator.hidden = NO;
      [self.indicator startAnimating];
      //进入异步线程
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
          //异步下载图片
          NSURL * url = [NSURL URLWithString:@"http://anImageUrl"];
          NSData * data = [NSData dataWithContentsOfURL:url];
          //网络请求之后进入主线程
          dispatch_async(dispatch_get_main_queue(), ^{
              //关闭loading
              [self.indicator stopAnimating];
              self.indicator.hidden = YES;
              if (data) {//显示图片
                  self.imageView.image = [UIImage imageWithData:data];
              }
          });
      });
     
    // 延迟执行:
        double delayInSeconds = 2.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // code to be executed on the main queue after delay
        });
     
     

    利用GCD并行多个线程并且等待所有线程结束之后再执行其它任务

    dispatch_group_t group = dispatch_group_create();
       dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
           // 并行执行的线程一
       });
       dispatch_group_async(group, dispatch_get_global_queue(0,0), ^{
           // 并行执行的线程二
       });
       dispatch_group_notify(group, dispatch_get_global_queue(0,0), ^{
           // 汇总结果
       });
  • 相关阅读:
    Travis CI Could not find or load main class org.gradle.wrapper.GradleWrapperMain 错误
    HyperSQL 链接参数中文件的路径
    Maven 在 pom.xml 文件中配置 repositories 仓库
    Flyway Validate failed: Migration checksum mismatch for migration version 1.0.0.01 错误
    Angular 服务
    Angular 主从组件
    Angular 显示英雄列表
    Angular 英雄示例教程
    L2-002. 链表去重---模拟
    HDU2057
  • 原文地址:https://www.cnblogs.com/happyEveryData/p/5574091.html
Copyright © 2011-2022 走看看