关于 ios 多图异步下载

通过dispatch_apply来下载,由于是同步线程所以只有当所有方法执行完之后,就是所有的图片下载完成之后,才会执行之后的代码,将此次执行来单独放到异步线程中区执行,从而达到图片统一下载,回到主线程中在刷新UI

NSMutableArray *array = [NSMutableArray arrayWithCapacity:0];

    //记录图片数量,有空图时,移除不存在的图

    NSInteger sum = 0;

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

    dispatch_async(queue, ^{

        dispatch_apply(fileArray.count, queue, ^(size_t index) {

           UIImage *image = [self imageWithURL:fileArray[index] andCompId:idarray[index]];

            if (image) {

                [array addObject:image];

            }else{

                //移除不存在的图

                sum += 1;

            }

        });

        if (array.count == fileArray.count - sum) {

            dispatch_async(dispatch_get_main_queue(), ^{

                if (array.count>0) {

                    NSArray *tempArray = [NSArray arrayWithArray:self.dataArray];

                    [self.dataArray  removeAllObjects];

                    [self.dataArray addObjectsFromArray:array];

                    [self.dataArray addObjectsFromArray:tempArray];

                }

                [self.collectionView reloadData];

                [self hideHud];

            });

        }

    });

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值