zoukankan      html  css  js  c++  java
  • IOS 使用GCD改善性能

    1.GCD介绍

      GCD:Grand Central Dispathch,核心中央调度,是一种异步技术。但是它是系统级的。

      负责管理队列,是线程之上的抽象层。队列可以并行或串行运行,能够在系统级自动管理和优化线程。把任务放到队列里执行,一个任务可以是一个函数或一个block。

    1.1.多线程分类

      以下的抽象度和底层函数级别从低到高。

    1.1.1. PThread 

      已经抛弃了

    1.1.2. NSThread

      几乎不用

    1.1.3. NSOperation

      多用于网络下载,但是现在都用开源库,例如:AFNetWorking

    1.1.4. GCD

      多用于本地解析数据。

    1.2. GCD概念说明

      GCD中的队列称之为 dispatch queue,分类为三类:

    1.2.1. main dispatch queue

    • 系统提供
    • 主线程
    • 全局性的
    • serial queue,串行,同一时间只能执行一个任务。
    • 用途:UI操作相关,主线程执行。
    • 用法:宏 dipatch_get_main_queue()

    1.2.3. global dispatch queue

    • 系统提供
    • 并发执行
    • 用法:函数 dispatch_get_global_queue(0,0),第一个参数为优先级,第二个参数现在没有意义,都是0。

      

    1.2.3. 自定义的 dispatch queue

    • 同时只能执行一个任务
    • 用途:用于同步访问特定的资源
    • 实时性没有太高要求的
    • 函数:dispatch_queue_create("SerialQueue", DISPATCH_QUEUE_SERIAL);

    2. GCD使用

    2.1. 同步提交

    • void dispath_sync(dispatch_queue_t queue, dispatch_block_t block);
    • 阻塞线程
    • Demo
      - (void)syncDownload{
        //同步下载,阻塞主线程
        NSURL *url = [NSURL URLWithString:@""];
        NSData *data = [[[NSData alloc] initWithContentsOfURL:url autorelease];
        UIImage *image = [[[UIImage alloc] initWithData:data] autorelease];
        _imageView.image = image; 
      }    

    2.2. 异步提交

    • void dispath_async(dispatch_queue_t queue, dispatch_block_t block);
    • 后台执行
    • Demo
      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
          //耗时的操作
          NSURL *url = [NSURL URLWithString:@""];
          NSData *data = [[[NSData alloc] initWithContentsOfURL:url autorelease];
          UIImage *image = [[[UIImage alloc] initWithData:data] autorelease];
          
          dispatch_async(dispatch_get_main_queue(),^{ 
              //更新界面 
              _imageView.image = image;
          }); 
      });    
  • 相关阅读:
    8款超酷体验的jQuery/CSS3应用插件
    6款基于SVG的HTML5CSS3应用和动画
    精妙无比 8款HTML5动画实例及源码
    超赞值得一试的六款jQuery插件和CSS3应用
    不容错过的七个jQuery图片滑块插件
    7款值得你心动的HTML5动画和游戏
    8款HTML5动画特效推荐源码
    绝对震撼 7款HTML5动画应用及源码
    8款超酷而实用的CSS3按钮动画
    10款强大的jQuery/HTML5应用新鲜出炉
  • 原文地址:https://www.cnblogs.com/SimonGao/p/4918440.html
Copyright © 2011-2022 走看看