CGD知识小结

2017-01-06  本文已影响0人  YJZhao

gcd 分为并行,串行两种方式,任务的执行可分为,同步,异步执行方式。

dispatch_queue_tqueue =dispatch_queue_create("queue",DISPATCH_QUEUE_SERIAL);//这是一个串行队列。

dispatch_queue_tQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);//这是一个并行队列。

dispatch_async(<#dispatch_queue_t queue#>, <#^(void)block#>);//这是异步方式

dispatch_sync(<#dispatch_queue_t queue#>, <#^(void)block#>);//这是同步方式

创建线程及更新UI的步骤如下:

/*

1、创建视图

2、创建一个串行队列

3、用异步方式执行串行队列中的任务

4、加载网络资源

5、回到主线程

6、更新UI

*/

1示例:

//1、创建视图

UIImageView *imageView= [[UIImageView alloc]initWithFrame:CGRectMake(50,50,200,200)]; 

imageView.backgroundColor= [UIColor cyanColor];

[self.viewaddSubview:myImageView];

//2、找到串行队列

dispatch_queue_tserialQueue =dispatch_queue_create("serialQueue",DISPATCH_QUEUE_SERIAL);

//3、用异步方式执行任务

dispatch_async(serialQueue, ^{

//4、加载网络资源

NSData*data = [NSDatadataWithContentsOfURL:[NSURLURLWithString:url]];//图片的url

UIImage*image = [UIImageimageWithData:data];

//5、回到主线程

//找到主队列:dispatch_get_main_queue()

dispatch_queue_tmainQueue =dispatch_get_main_queue();

dispatch_sync(mainQueue, ^{

//6、更新UI

imageView.image= image;

});

});

2 实例:

//1、创建多个视图

for(inti=0; i<3; i++) {

for(intj=0; j<2; j++) {

UIImageView *imageView= [[UIImageView alloc]initWithFrame:CGRectMake(10+j*100,40+i*100,90,90)]; 

imageView.backgroundColor= [UIColor orangeColor];

imageView.tag=imageTag++;//imageTag上设置成全局变量,其初始值是100

[self.viewaddSubview:imageView];

}

}

2//并行

dispatch_queue_tQueue =dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

3//创建组

dispatch_group_tGroup =dispatch_group_create();

4//将并行任务放入到组中

dispatch_group_async(Group,Queue, ^{

for(intindex =0; index<6; index++) {

NSData*data = [NSData dataWithContentsOfURL:[NSURLURLWithString:url]];//放入你的图片的url

UIImage*image = [UIImageimageWithData:data];

[arraymutable addObject:image];//创建一个可变数组用于接受生成的image对象,注意不要忘记初始化数组

}

});

5//所有组都完成后执行

dispatch_group_notify(Group, Queue, ^{

6//回到主线程

dispatch_async(dispatch_get_main_queue(), ^{

NSLog(@"%@",arraymutable);

for(inti=0; i<6; i++) {

UIImageView*iamgeview = [self.viewviewWithTag:100+i];

iamgeview.image=arraymutable[i];//将数组中的image对象赋值

}

});

});

先写这两个方法。

上一篇 下一篇

猜你喜欢

热点阅读