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, ), ^{
    //耗时的操作
    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;
    });
    });

IOS 使用GCD改善性能的更多相关文章

  1. 【读书笔记】iOS-使用GCD改善性能

    一,队列简介. 有些与并行处理相关的术语令人迷惑.线程是一个常用的术语,在iOS应用中,线程是标准的POSIX线程.从技术上说,线程不过是一组指令,可在进程中独立地处理:在同一个进程中,可以有多个线程 ...

  2. iOS多线程 GCD

    iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main que ...

  3. iOS's GCD Note

    [iOS's GCD Note] 1.默认有四种全局concureent queue,如下: 通过以下函数来引用: 2.官方文档上并发队列有3种,实际上main就是serial. 1)serial,用 ...

  4. 《MySQL必知必会》学习笔记——第30章 改善性能

    本章将付息与MySQL性能有关的某些要点. 30.1 改善性能 数据库管理员把他们生命中的相当一部分时间花在了调整.试验以改善DBMS性能之上.在诊断英勇的滞缓现象和性能问题时,性能不良的数据库(以及 ...

  5. iOS中GCD的使用小结

    http://www.jianshu.com/p/ae786a4cf3b1 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列类型 Th ...

  6. iOS多线程——GCD与NSOperation总结

    很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...

  7. iOS进阶之页面性能优化

    转载:http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话,"过早的优化是万恶之源",不要过早优化或者过度优化.我 ...

  8. IOS开发-提升app性能的25条建议和技巧

    前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...

  9. IOS学习笔记45--UITableView性能优化

    说实话,面试的时候已经被问到几次这个问题,然后就搜索了一下,看到了这篇优化文章,感觉不错,转来日后作为一种UITableView优化的方法. 使用不透明视图.      不透明的视图可以极大地提高渲染 ...

随机推荐

  1. iOS数据持久化之数据库:SQLite和FMDB

    SQLite: SQLite是一款轻量级型的数据库,资源占用少.性能良好和零管理成本,具有零配置(无需安装和管理配置).独立(没有额外依赖).储存在单一磁盘文件中的一个完整的数据库.源码完全的开源.比 ...

  2. 启动ipython notebook(jupyter)

    启动本地notebook 随便找一个shell,在windows里,最简单的cmd.exe就行,键入: ipython.exe notebook

  3. 标签(改变样式style)

    id可以换为class,class对应的名字可以多个一样 <div class="box">box1</div> <div class="b ...

  4. 转:总结Selenium WebDriver中一些鼠标和键盘事件的使用

    在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 W ...

  5. 进程间通信——FIFO(多个客户进程,一个服务进程)

    FIFO简介 FIFO就是Unix的一种复合POSIX标准的进程间通信机制.他又称为命名管道,跟管道的不同点是,每个FIFO都有一个路径名与之关联. FIFO虽然有路径名,但是他这中文件是在内核态(管 ...

  6. [Unity]背包效果-使用NGUI实现物品的拖拽效果Drag

    背包效果-使用NGUI实现物品的拖拽效果Drag 效果实现如图 对象层级关系图 PacketCell - Right 对象作为单元格背景 PacketContainer 对象作为单元格容器 Packe ...

  7. Python 100例(下)

    如果你坚持到这了,哪就为自己鼓掌吧!坚持,你一定可以. 实例51: 题目:学习使用按位与&. #!/usr/bin/env  python# --*--coding:utf-8 --*--'' ...

  8. 第十七篇 --ANDROID DisplayManager 服务解析一

    ANDROID从版本4.2开始提供了一个显示管理服务DisplayManagerService,支持多种显示类型的多个显示器的镜像显示,包括内建的显示类型(本地).HDMI显示类型以及支持WIFI D ...

  9. Tower Defense Game

    Tower Defense Game 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 There is a tower defense game with n level ...

  10. ApexSql Log

    网址:https://www.apexsql.com/,可免费试用14天   安装成功后,点击new,配置DB连接:   选择要分析的Log文件:   进行过滤设置:     基本设置:时间,DML和 ...