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, ), ^{
//耗时的操作
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改善性能的更多相关文章
- 【读书笔记】iOS-使用GCD改善性能
一,队列简介. 有些与并行处理相关的术语令人迷惑.线程是一个常用的术语,在iOS应用中,线程是标准的POSIX线程.从技术上说,线程不过是一组指令,可在进程中独立地处理:在同一个进程中,可以有多个线程 ...
- iOS多线程 GCD
iOS多线程 GCD Grand Central Dispatch (GCD)是Apple开发的一个多核编程的解决方法. dispatch queue分成以下三种: 1)运行在主线程的Main que ...
- iOS's GCD Note
[iOS's GCD Note] 1.默认有四种全局concureent queue,如下: 通过以下函数来引用: 2.官方文档上并发队列有3种,实际上main就是serial. 1)serial,用 ...
- 《MySQL必知必会》学习笔记——第30章 改善性能
本章将付息与MySQL性能有关的某些要点. 30.1 改善性能 数据库管理员把他们生命中的相当一部分时间花在了调整.试验以改善DBMS性能之上.在诊断英勇的滞缓现象和性能问题时,性能不良的数据库(以及 ...
- iOS中GCD的使用小结
http://www.jianshu.com/p/ae786a4cf3b1 本篇博客共分以下几个模块来介绍GCD的相关内容: 多线程相关概念 多线程编程技术的优缺点比较? GCD中的三种队列类型 Th ...
- iOS多线程——GCD与NSOperation总结
很长时间以来,我个人(可能还有很多同学),对多线程编程都存在一些误解.一个很明显的表现是,很多人有这样的看法: 新开一个线程,能提高速度,避免阻塞主线程 毕竟多线程嘛,几个线程一起跑任务,速度快,还不 ...
- iOS进阶之页面性能优化
转载:http://www.jianshu.com/p/1b5cbf155b31 前言 在软件开发领域里经常能听到这样一句话,"过早的优化是万恶之源",不要过早优化或者过度优化.我 ...
- IOS开发-提升app性能的25条建议和技巧
前言 这篇文章介绍了作者开发工作中总结的25个iOS开发tips, 多年之前读过这篇文章.收益良多,基本每一个tips在我的应用开发过程中都使用过.今天把这篇文章又一次整理转发下,与大家一起学习,不论 ...
- IOS学习笔记45--UITableView性能优化
说实话,面试的时候已经被问到几次这个问题,然后就搜索了一下,看到了这篇优化文章,感觉不错,转来日后作为一种UITableView优化的方法. 使用不透明视图. 不透明的视图可以极大地提高渲染 ...
随机推荐
- 用telnet命令,POP3接收邮件
昨天已经成功利用telnet命令发送了邮件,今天接着来,只能发送不能接收多郁闷. 邮件的接收这里是基于pop3协议的,pop3协议共定义了12条与接收相关的邮件,如下面简单解释: 首先是与登陆验证相关 ...
- Regionals 2010 :: NEERC Eastern Subregional
遇到的问题:题目看错...(TAT英语渣渣没办法) 这里具体就讲一些思想和trick ①A题遇到了公式里面的单位问题. ②E题就是变量初始化忘记了 ③J题就是分情况讨论,实际上没有那么难...(题目读 ...
- C#入门经典(3-窗体应用程序-第二章要点)
新建一个窗体用用程序,拖一个按钮,加事件和Text属性.打开Form1Designer.cs.
- android脚步---数字时钟和模拟时钟
时钟UI组件是两个非常简单的组件,分为Digitalclock 和Analogclock, main.xml文件,书中程序有问题,加了两个组件,一个Button和一个<Chronometer ...
- 生日蛋糕(DFS)
题意: Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕 ...
- java war 打包、解压命令
经常将工程打包成war包,打包如下: // 将当前目录打包成war包 jar cvf temp.war . 命令格式: java cvf 打包文件名称 要打包的目录 打包文件保存路径 解压自然就是: ...
- JS动态生成<style>
var nod = document.createElement(“style”), str = “body{background:#000;color:#fff} a{color:#fff;text ...
- php示例代码
11111<?php $var = 'ABCDEFGH:/MNRPQR/'; echo "Original: $var<hr />\n"; /* 这两个例子使用 ...
- IWorkspaceFactory接口
When To Use Use IWorkspaceFactory when you need to create a new workspace, connect to an existing wo ...
- DedeCMS新建模型字段【附件样式】修改方法
当我们在系统模型中添加了一个自定义附件类型字段的时候,例如我在后台添加一个名为"fujian"的附件类型的字段,字段的实际内容为:'/uploads/soft/2245/1-255 ...