在上一篇浅说Grand Central Dispatch(一)文章中,我们介绍了全局queue和main queue,这篇文章我们介绍怎么使用自定义的queue
自定义的queue和main queue很类似,都是串行出队列执行的,一次出一个,执行完再出第二个。只不过main queue里面的任务是和UI相关的,自定义queue和UI无关
比如我们看下面代码,然后看打印结果就知道自定义queue的作用了
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
for(int i=1; i<=5; i++){
dispatch_async(dispatch_get_global_queue(0, 0), ^{
printf("global queue i=%d\n", i);
});
}
dispatch_queue_t sereialQueue=dispatch_queue_create("Sereial Queue", NULL);
for(int i=1; i<=5; i++){
dispatch_async(sereialQueue, ^{
printf("sereial queue i=%d\n", i);
});
}
dispatch_release(sereialQueue);
}
打印结果为
global queue i=2
global queue i=4
global queue i=5
global queue i=3
sereial queue i=1
global queue i=1
sereial queue i=2
sereial queue i=3
sereial queue i=4
sereial queue i=5
从打印结果可以看出自定义队列中的任务是按照串行执行的,虽然是串行执行的,但还是在另外的线程中执行的,不是在main线程中执行的。
自定义的queue和main queue很类似,都是串行出队列执行的,一次出一个,执行完再出第二个。只不过main queue里面的任务是和UI相关的,自定义queue和UI无关
比如我们看下面代码,然后看打印结果就知道自定义queue的作用了
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
for(int i=1; i<=5; i++){
dispatch_async(dispatch_get_global_queue(0, 0), ^{
printf("global queue i=%d\n", i);
});
}
dispatch_queue_t sereialQueue=dispatch_queue_create("Sereial Queue", NULL);
for(int i=1; i<=5; i++){
dispatch_async(sereialQueue, ^{
printf("sereial queue i=%d\n", i);
});
}
dispatch_release(sereialQueue);
}
打印结果为
global queue i=2
global queue i=4
global queue i=5
global queue i=3
sereial queue i=1
global queue i=1
sereial queue i=2
sereial queue i=3
sereial queue i=4
sereial queue i=5
从打印结果可以看出自定义队列中的任务是按照串行执行的,虽然是串行执行的,但还是在另外的线程中执行的,不是在main线程中执行的。