GCD 综合使用示例


继续前面 导入 #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串行队列与并发队列

2.2>GCD 延时执行操作
2.3>GCD 线程组的使用
2.4>GCD 定时器的使用
2.5> GCD 信号量将异步操作转换为同步操作
你可以用 GCD 的这些功能实现一个多文件下载队列的需求。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值