2 u012575301 u012575301 于 2016.01.24 17:19 提问

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
wangyaninglm   Ds   Rxr 2016.01.24 22:12

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

oyljerry
oyljerry   Ds   Rxr 2016.01.24 22:51

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

qq_26544491
qq_26544491   2016.01.25 09:58

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

leilba
leilba   Rxr 2016.01.25 11: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 22:44

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

Csdn user default icon
上传中...
上传图片
插入图片