问题描述
- 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];
}];
}这是一个循环里面以一个异步去取缓存图片然后存到一个数组内存中 但是这会有一个问题 以为是异步 所以有时候图片没拿到 循环就直接往下走 有什么办法 让循环一次必须在异步取完图片之后再循环下一次 真心求解答 或者我的做法本身就有问题 能给一个更好的思路吗 在线等
解决方案
异步就是这样啊,那你就用同步阻塞操作呗?或者异步的同时遍历看到哪里图片没有请求回来,就反复请求
解决方案二:
你应该在异步的block中处理图片下载下来以后的动作 比如更新图片到界面 这就是异步处理流程
解决方案三:
那就不要异步呀 在异步里面加同步就好了 ! 还有疑问加我QQ:东方执念-490986262
解决方案四:
可以转化成类似这样的形式:
/**
* 异步转同步加载图片
*
* @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];
}];
}
解决方案五:
同步阻塞即可,或者 block 也可以的
时间: 2024-09-11 23:27:59