美文网首页
CGD知识小结

CGD知识小结

作者: YJZhao | 来源:发表于2017-01-06 20:08 被阅读0次

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对象赋值

}

});

});

先写这两个方法。

相关文章

  • CGD知识小结

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

  • CGD相关知识

    GCD队列总体分为同步队列和异步队列两种,添加到同步队列中的任务,根据添加的顺序挨个执行,添加到异步队列里面的任务...

  • IOS CGD全面解析

    IOS CGD全面解析

  • NSOperation相关知识总结

    本文主要介绍NSOperation相关知识,在此之前要先说说iOS中另外一个多线程实现方式的CGD。 GCD gc...

  • CGD用法

    多任务

  • CGD会议20190703

    主题:破冰会议 组织者:Cherish 参与者:sophie、Irene、Aaron、Kevin、Helen、Li...

  • CGD Team meeting

    1.Participants Irene、Helen、Tianyin、Aaron、Wading Shi、Sophi...

  • 知识小结

    函数作用域 每调用一次,函数就会创建一个新的函数作用域,他们之间的访问时互相独立的。 函数作用域可以访问到全局作用...

  • 知识小结

    requests requests模块:是对urllib的封装,可以实现urllib的所有功能 并且api调用更加...

  • 知识小结

    1.当我们在css中用background-image:url()插入背景图片时,可能会写这样子,很不幸我的电脑不...

网友评论

      本文标题:CGD知识小结

      本文链接:https://www.haomeiwen.com/subject/vtsxbttx.html