多线程
2016-04-13 18:10
288 查看
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^{ dispatch_group_t group = dispatch_group_create(); dispatch_group_async(group, queue, ^{ }); dispatch_group_async(group, queue, ^{ }); dispatch_group_notify(group, queue, ^{ dispatch_async(dispatch_get_main_queue(), ^{ }); }); });
//串行队列 dispatch_queue_t serialQueue = dispatch_queue_create("myThreadQueue1", DISPATCH_QUEUE_SERIAL); //并发队列 dispatch_queue_t globalQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); for (int i = 0; i < count; ++i) { // 异步加载 dispatch_async(serialQueue, ^{ [self loadImage:[NSNumber numberWithInt:i]]; }); // 同步加载 dispatch_sync(serialQueue, ^{ [self loadImage:[NSNumber numberWithInt:i]]; }); } dispatch_barrier_async(globalQueue, ^{ [self loadImage:[NSNumber numberWithInt:count - 1]]; }); for (int i = 0; i < count - 1; ++i) { dispatch_async(globalQueue, ^{ [self loadImage:[NSNumber numberWithInt:i]]; }); }
dispatch_queue_t mainQueue = dispatch_get_main_queue(); dispatch_sync(mainQueue, ^{ [self updateImage:imageData]; }); dispatch_async(mainQueue, ^{ [self updateImage:imageData]; });
1、Thread for (int i = 0; i < ROW_COUNT * COLUMN_COUNT; ++i) { [NSThread detachNewThreadSelector:@selector(loadImage:) toTarget:self withObject:[NSNumber numberWithInt:i]]; NSThread * thread=[[NSThread alloc] initWithTarget:self selector:@selector(loadImage:) object:[NSNumber numberWithInt:i]]; thread.name=[NSString stringWithFormat:@"myThread%i",i]; [thread start]; } [self performSelectorOnMainThread:@selector(updateImage:) withObject:imageData waitUntilDone:YES]; [self performSelectorInBackground:@selector(updateImage:) withObject:imageData];
NSOperationQueue * operationQueue = [[NSOperationQueue alloc] init]; operationQueue.maxConcurrentOperationCount = 5; for (int i = 0; i < count; ++i) { [operationQueue addOperationWithBlock:^{ [self loadImage:[NSNumber numberWithInt:i]]; }]; } 依赖关系 NSBlockOperation * lastBlockOperation= [NSBlockOperation blockOperationWithBlock:^{ [self loadImage:[NSNumber numberWithInt:(count - 1)]]; }]; for (int i = 0; i < count - 1; ++i) { NSBlockOperation * blockOperation = [NSBlockOperation blockOperationWithBlock:^{ [self loadImage:[NSNumber numberWithInt:i]]; }]; [blockOperation addDependency:lastBlockOperation]; [operationQueue addOperation:blockOperation]; } [operationQueue addOperation:lastBlockOperation]; [[NSOperationQueue mainQueue] addOperationWithBlock:^{ [self updateImage:imageData]; }];
相关文章推荐
- 【Leetcode】:Single Number II问题 in Go语言
- eclipse平台如何实用Marker来实现Problem View的输出
- UIKit框架-高级控件Swift版本: 9.UINavigationController方法/属性详解
- 苹果审核相关
- 鸟哥书籍awk工具学习
- sun.net.ftp.FtpClient 中文API
- python笔记 - 高级属性(20160413)
- switch能否作用于Long,string上
- Android中的ANR
- 软键盘问题汇总
- db2 export与 import中的 codepage 转换
- 进程与线程
- kendo ui treeview设置节点选中
- 加速度计和陀螺仪的区别
- Android中的Interpolator
- 软考高项2016年4月11日作业
- EventBus 3.0进阶-Delivery Threads (ThreadMode)传送线程(线程模式)
- RabbitMQ分布式集群架构
- 开源库收集,整理 Useful-Open-Source-Android
- 错误:Command /usr/bin/codesign failed with exit code 1