请选择 进入手机版 | 继续访问电脑版
查看: 528|回复: 0

[手机开发] GCD编程-串行队列与并发队列

3万

主题

3万

帖子

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
100197
发表于 2015-7-11 14:11:09
接着上面的GCD封装,下面进行列子验证
1.导入GCD.h 2.创一个串行队列:

- (void)serailQueue{

//创建出队列

GCDQueue *queue = [[GCDQueuealloc]initSerial];

//执行队列中的线程

[queueexecute:^{

NSLog(@"1");

}];

[queueexecute:^{

NSLog(@"2");

}];

[queueexecute:^{

NSLog(@"3");

}];

[queueexecute:^{

NSLog(@"4");

}];

[queueexecute:^{

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 = [[GCDQueuealloc]initConcurrent];

//执行队列中的线程

[queueexecute:^{

NSLog(@"1");

}];

[queueexecute:^{

NSLog(@"2");

}];

[queueexecute:^{

NSLog(@"3");

}];

[queueexecute:^{

NSLog(@"4");

}];

[queueexecute:^{

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


//globalQueue 是默认级别的子线程

//一般在子线程中处理业务逻辑,主线程中更新UI

[GCDQueueexecuteInGlobalQueue:^{

//处理业务逻辑

NSURLRequest *request = [NSURLRequestrequestWithURL:[NSURLURLWithString: @"***"]];

NSData *picData =[NSURLConnectionsendSynchronousRequest:request

returningResponse:nilerror:nil];

self.image = [UIImage imageWithData:picData];

[GCDQueueexecuteInMainQueue:^{

//主线程中更新UI

self.imageView.image = self.image;

}];

}];


总结:

串行队列一次只执行一个线程,按照添加到队列的顺序依次执行 并发队列一次可以执行多个线程,线程的执行没有先后顺序 UI界面所在的线程队列是串行队列

版权声明:本文为编程学堂(www.bcxue.com)转载于网络,仅供大家参考学习用。



回复

使用道具 举报