objective-c - ios 关于循环异步的问题

 asdfu_814 发布于 2022-10-29 07:21

for (int i = 0; i < array.count; i++) {

[_stagePhotoView sd_setImageWithURL:[[NSURL alloc] initWithString:[NSString stringWithFormat:@"%@?imageView/w/4",array[i]]] completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL) {
        [_imageArray addObject:image];
    }];

}

这是一个循环里面以一个异步去取缓存图片然后存到一个数组内存中 但是这会有一个问题 以为是异步 所以有时候图片没拿到 循环就直接往下走 有什么办法 让循环一次必须在异步取完图片之后再循环下一次 真心求解答 或者我的做法本身就有问题 能给一个更好的思路吗 在线等

3 个回答
  • 也就是说整个过程是一个在子线程的阻塞队列吧。
    这种情况不要用sd_setImageWithURL这个方法了,因为你图片获取来了是令做他用。这个时候你可以用
    SDWebImagePrefetcher.h里面的

    /**
     * Assign list of URLs to let SDWebImagePrefetcher to queue the prefetching,
     * currently one image is downloaded at a time,
     * and skips images for failed downloads and proceed to the next image in the list
     *
     * @param urls list of URLs to prefetch
     */
    - (void)prefetchURLs:(NSArray *)urls;

    如果要一个一个下载的话,可以把并行数maxConcurrentDownloads设置为1
    可以通过实现SDWebImagePrefetcherDelegate代理方法来检测每一张图片是否下载完成。
    具体要拿到某一张图片,可以通过url从缓存里直接取

    2022-10-30 10:14 回答
  • 为什么非得在这样子把image装进数组,把ImageView装进数组也行啊,给imageView加tag,通过tag判断是第几张图片
    2022-10-30 10:18 回答
  • _imageArray 可以先放入array.count个image,block里面根据imageView的tag来判断获取的第几张图片,然后block里面用数组根据index的方法替换image.

    [arr removeObjectAtIndex:imageView.tag];
    [arr insertObject:image atIndex:imageView.tag];
    
    2022-10-30 10:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有