继续前面 导入 #import"GCD.h"
- (void)viewDidLoad
{
[superviewDidLoad];
self.view1 = [selfcreateImgViewWithFrame:CGRectMake(0,0,100,100)];
self.view2 = [selfcreateImgViewWithFrame:CGRectMake(100,0,100,100)];
self.view3 = [selfcreateImgViewWithFrame:CGRectMake(200,0,100,100)];
NSString *net1 =@"http://avatar.csdn.net/8/6/1/1_baitxaps.jpg";
NSString *net2 =@"http://avatar.csdn.net/8/6/1/1_baitxaps.jpg";
NSString *net3 =@"http://avatar.csdn.net/8/6/1/1_baitxaps.jpg";
//初始化信号量
GCDSemaphore *semaphore = [[GCDSemaphore alloc]init];
//图片1
[GCDQueue executeInGlobalQueue:^{
//获取图片1
UIImage *image1 = [self accessDataByNetString:net1];
[GCDQueue executeInMainQueue:^{
[UIViewanimateWithDuration:2.fanimations:^{
self.view1.image = image1;
self.view1.alpha =1.f;
}completion:^(BOOL finished) {
[semaphore signal];
}];
}];
}];
//图片2
[GCDQueue executeInGlobalQueue:^{
[semaphore wait];
//获取图片2
UIImage *image2 = [self accessDataByNetString:net2];
[GCDQueue executeInMainQueue:^{
[UIViewanimateWithDuration:2.fanimations:^{
self.view2.image = image2;
self.view2.alpha =1.f;
}completion:^(BOOL finished) {
[semaphore signal];
}];
}];
}];
//图片3
[GCDQueue executeInGlobalQueue:^{
[semaphore wait];
//获取图片3
UIImage *image3 = [selfaccessDataByNetString:net3];
[GCDQueue executeInMainQueue:^{
[UIViewanimateWithDuration:2.fanimations:^{
self.view3.image = image3;
self.view3.alpha =1.f;
}completion:^(BOOL finished) {
}];
}];
}];
}
// 获取图片
- (UIImage *)accessDataByNetString:(NSString *)string{
NSURLRequest *request = \
[NSURLRequestrequestWithURL:[NSURLURLWithString:string]];
NSData * data =\
[NSURLConnectionsendSynchronousRequest:request
returningResponse:nil
error:nil];
return [UIImageimageWithData:data];
}
- (UIImageView *)createImgViewWithFrame :(CGRect)frame
{
UIImageView *imageView = [[UIImageView alloc]initWithFrame:frame];
imageView.alpha = 0.f;
[self.view addSubview:imageView];
return imageView;
}
运行结果
1.先显示图片1 ->显示图片2 ->显示图片3
总结:
1.用GCD 实现按次序执行非常容,也可用GCD线程组 实现
2.通过上面的编程中学习了GCD编程,掌握了以下知识
2.1>GCD串行队列与并发队列