GCD部分用法及遍历方法

GCD
Dispatch_group:(异步执行,dispatch_group_notify监听group执行完毕之后执行)

dispatch_group_t downloadGroup = dispatch_group_create(); for (int i = 1 ; i <= pageNum; i++) { dispatch_group_enter(downloadGroup); // 执行下载任务 dispatch_group_leave(downloadGroup); } dispatch_group_notify(downloadGroup, dispatch_get_main_queue(), ^{ [activitingArray sortUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO]]]; [self.activeCV reloadData]; });

Dispatch_after:延迟执行dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)); // 1 dispatch_after(popTime, dispatch_get_main_queue(), ^(void){ // 主线程执行更新动作。});

Dispatch_once:以线程安全的方式执行且仅执行其代码块一次static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedPhotoManager = [[PhotoManager alloc] init]; sharedPhotoManager->_photosArray = [NSMutableArray array]; sharedPhotoManager->_concurrentQueue = dispatch_queue_create(" ", DISPATCH_QUEUE_CONCURRENT); });

Dispatch_apply:并发执行不同迭代,相当于一个for循环,同步的。dispatch_apply(3, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^(size_t i) { NSURL *url; switch (i) { case 0: url = [NSURL URLWithString:edGirlfriendURLSting]; break; default: break; }

遍历方法

Dispatch_apply:异步执行,可以利用多核优势
EnumerateObjecsWithOptions:异步执行,多核优势,可以指定遍历顺序[imageArray enumerateObjectsWithOptions:NSEnumerationReverseusingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"idx = %ld, id = %@", idx, obj); }];

EnumerateObjecsUsingBlock:不可指定遍历顺序[imageArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSLog(@"idx = %ld, id = %@", idx, obj); }];

For in (NSFastEnumeration):快速遍历

对于集合中对象数很多的情况下,for in (NSFastEnumeration)的遍历速度非常之快,但小规模的遍历并不明显(还没普通for循环快)

使用kvc集合运算符运算很大规模的集合时,效率明显下降(100万的数组离谱的21秒多),同时占用了大量内存和cpu

enumerateObjectsWithOptions(NSEnumerationConcurrent)dispatch_apply(Concurrent)的遍历执行可以利用到多核cpu的优势(实验中在双核cpu上效率基本上x2)

遍历执行Block对于耗时的任务来说是很值得这么做的,而且在以后cpu升级成更多核心后不用改代码也可以享受带来的好处

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • GCD Dispatch_group:(异步执行,dispatch_group_notify监听group执行完毕...
    月咏蝴蝶阅读 3,942评论 1 1
  • 我们知道在iOS开发中,一共有四种多线程技术:pthread,NSThread,GCD,NSOperation: ...
    请叫我周小帅阅读 5,357评论 0 1
  • 1. GCD简介 什么是GCD呢?我们先来看看百度百科的解释简单了解下概念 引自百度百科:Grand Centra...
    千寻_544f阅读 3,101评论 0 0
  • 尽管时间管理的目的,不是为了控制时间,但这确实是学做管理的入门。本周计划的预计时间为63.5小时,实际时间为...
    Ares1981阅读 1,688评论 0 2
  • 你今天说了这样的话 我该用怎样的话来回答呢 我想认真 可是怕被当成笑话 我还是自卑的 你对我而言 是应该认真的存在...
    喜欢皮卡丘的你阅读 1,117评论 0 0

友情链接更多精彩内容