iOS使用GCD处理耗时操作

2018-02-27 11:13:26来源:https://www.jianshu.com/p/db42906e3fda作者:impBearXXX人点击

分享


        在iOS开发的过程中会遇上不少操作比较耗时,虽然iOS默认支持多线程当时为了保持主线程的顺滑与流畅,需要及时的处理比较耗时的操作任务,及时的响应用户的交互

一、处理耗时的逻辑操作

         在比较常见的网络请求、图像压缩裁剪、上传下载数据资源等损耗CPU或者GPU的操作时,可以通过将此些耗时的逻辑操作防至全局队列中异步执行:





GCD 创建全局队列



系统api:dispatch_get_global_queue(long identifier, unsigned long flags);


DISPATCH_QUEUE_PRIORITY_DEFAULT 系统提供的宏,值为0


async表明异步运行,block代表的是block操作任务,queue则是任务所处队列.



二、实例验证

          为了验证自己写了个批量生产二维码图片的小demo,通过解析json 文件内的内容,整体文件有1500 个键值对,为了节省对比时间,只取了前100 个键值内容进行二维码生成对比结果如下:

1、直接通过json文件内容数据生成100 个大小尺寸为200 *200 的二维码图片,生成代码:






2、通过Instruments 中Time Profiler 工具调试100个二维码生成的过程总耗时6.09s:




3、将耗时操作代码放至全局队列执行:


为了防止block内循环引用,image需要用__block修饰






4、通过Instruments 中Time Profiler 工具调试100个二维码生成的过程总耗时2.69s:


2.69s


三、对比验证


1、为了保持严谨,我有再次写了个音频格式转化程序验证这条代码的有效性:





录音文件转化成mp3 格式音频


音频转格式程序耗时:5.49 s



放至全局队列中执行:3.70 s












最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台