u012575301
哈哈哈嘿嘿嘻嘻
采纳率4.3%
2016-01-24 09:19 阅读 2.0k

ios 关于循环异步的问题

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];
}];
}

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

5条回答 默认 最新

  • wangyaninglm shiter 2016-01-24 14:12

    异步就是这样啊,那你就用同步阻塞操作呗?或者异步的同时遍历看到哪里图片没有请求回来,就反复请求

    点赞 评论 复制链接分享
  • oyljerry oyljerry 2016-01-24 14:51

    你应该在异步的block中处理图片下载下来以后的动作 比如更新图片到界面 这就是异步处理流程

    点赞 评论 复制链接分享
  • qq_26544491 Tel_小超 2016-01-25 01:58

    那就不要异步呀 在异步里面加同步就好了 ! 还有疑问加我QQ:东方执念-490986262

    点赞 评论 复制链接分享
  • leilba 林深 2016-01-25 03:36

    可以转化成类似这样的形式:

     /**
     *  异步转同步加载图片
     *
     *  @param array 图片名称数组
     *  @param i     当前访问的数组的位置
     */
    - (void)getImageArrayWithImageNames:(NSArray *)array withIndex:(NSUInteger)i{
        if (i >= array.count) {
    
            //图片加载完成
            //继续其他操作
            return;
        }
        __weak SignetController *weakSelf = self;
        [_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];
            if (weakSelf != nil)
            [self getImageArrayWithImageNames:array withIndex:i+1];
        }];
    }
    
    点赞 评论 复制链接分享
  • TonyShanM TonyShanM 2016-01-29 14:44

    同步阻塞即可,或者 block 也可以的

    点赞 评论 复制链接分享

相关推荐