GCD编程-串行队列与并发队列
2015-07-11 10:56
246 查看
接着上面的GCD封装,下面进行列子验证
1.导入GCD.h
2.创一个串行队列:
- (void)serailQueue{
//创建出队列
GCDQueue *queue = [[GCDQueue alloc]initSerial];
//执行队列中的线程
[queue execute:^{
NSLog(@"1");
}];
[queue execute:^{
NSLog(@"2");
}];
[queue execute:^{
NSLog(@"3");
}];
[queue execute:^{
NSLog(@"4");
}];
[queue execute:^{
NSLog(@"5");
}];
}
得出串行结果:
2015-07-11 10:34:28.641 GCDDelay[2262:174638] 1
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 2
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 3
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 4
2015-07-11 10:34:28.643 GCDDelay[2262:174638] 5
3.并发队列
- (void)initConcurrent{
GCDQueue *queue = [[GCDQueue alloc]initConcurrent];
//执行队列中的线程
[queueexecute:^{
NSLog(@"1");
}];
[queue execute:^{
NSLog(@"2");
}];
[queue execute:^{
NSLog(@"3");
}];
[queue execute:^{
NSLog(@"4");
}];
[queue execute:^{
NSLog(@"5");
}];
}
得出并发结果:
2015-07-11 10:38:28.849 GCDDelay[2303:178328] 3
2015-07-11 10:38:28.849 GCDDelay[2303:178334] 4
2015-07-11 10:38:28.849 GCDDelay[2303:178325] 2
2015-07-11 10:38:28.849 GCDDelay[2303:178327] 1
2015-07-11 10:38:28.850 GCDDelay[2303:178335] 5
4.globalQueue 是默认级别的子线程 ,一般在子线程中处理业务逻辑,主线程中更新UI
[GCDQueue
executeInGlobalQueue:^{
//处理业务逻辑
NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"***"]];
NSData *picData =[NSURLConnectionsendSynchronousRequest:request
returningResponse:nilerror:nil];
self.image = [UIImage imageWithData:picData];
[GCDQueue executeInMainQueue:^{
//主线程中更新UI
self.imageView.image =self.image;
}];
}];
总结:
串行队列一次只执行一个线程,按照添加到队列的顺序依次执行
并发队列一次可以执行多个线程,线程的执行没有先后顺序
UI界面所在的线程队列是串行队列
1.导入GCD.h
2.创一个串行队列:
- (void)serailQueue{
//创建出队列
GCDQueue *queue = [[GCDQueue alloc]initSerial];
//执行队列中的线程
[queue execute:^{
NSLog(@"1");
}];
[queue execute:^{
NSLog(@"2");
}];
[queue execute:^{
NSLog(@"3");
}];
[queue execute:^{
NSLog(@"4");
}];
[queue execute:^{
NSLog(@"5");
}];
}
得出串行结果:
2015-07-11 10:34:28.641 GCDDelay[2262:174638] 1
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 2
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 3
2015-07-11 10:34:28.642 GCDDelay[2262:174638] 4
2015-07-11 10:34:28.643 GCDDelay[2262:174638] 5
3.并发队列
- (void)initConcurrent{
GCDQueue *queue = [[GCDQueue alloc]initConcurrent];
//执行队列中的线程
[queueexecute:^{
NSLog(@"1");
}];
[queue execute:^{
NSLog(@"2");
}];
[queue execute:^{
NSLog(@"3");
}];
[queue execute:^{
NSLog(@"4");
}];
[queue execute:^{
NSLog(@"5");
}];
}
得出并发结果:
2015-07-11 10:38:28.849 GCDDelay[2303:178328] 3
2015-07-11 10:38:28.849 GCDDelay[2303:178334] 4
2015-07-11 10:38:28.849 GCDDelay[2303:178325] 2
2015-07-11 10:38:28.849 GCDDelay[2303:178327] 1
2015-07-11 10:38:28.850 GCDDelay[2303:178335] 5
4.globalQueue 是默认级别的子线程 ,一般在子线程中处理业务逻辑,主线程中更新UI
[GCDQueue
executeInGlobalQueue:^{
//处理业务逻辑
NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString:@"***"]];
NSData *picData =[NSURLConnectionsendSynchronousRequest:request
returningResponse:nilerror:nil];
self.image = [UIImage imageWithData:picData];
[GCDQueue executeInMainQueue:^{
//主线程中更新UI
self.imageView.image =self.image;
}];
}];
总结:
串行队列一次只执行一个线程,按照添加到队列的顺序依次执行
并发队列一次可以执行多个线程,线程的执行没有先后顺序
UI界面所在的线程队列是串行队列
相关文章推荐
- 如何用C语言封装 C++的类,在 C里面使用
- 阶乘因式分解(二)
- JDK动态代理与CGLIB动态代理
- vsftpd 出现553 Could not create file 解决方法
- yii 使用小技巧
- C中如何调用C++函数
- (转)PHP的ereg()与eregi()的不同及相同点。对比
- Java基础
- Eclipse导入项目出现感叹号
- C# List去重的三种方法
- C++智能指针大总结
- c#第二次作业
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- C++类中数据成员为类类型时,定义为对象还是定义为指针?
- Java基础课——interface的理解
- Java反射
- python并行任务
- C语言中的sizeof
- java中Keytool的使用总结
- c#第三次作业