我想异步从服务器下载图像,但它们并不是连续出现的。当我发出同步请求时,它会连续下载,但会产生其他问题。
代码:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^(void){
NSString *UrlStr=urlString;
NSURL *imageURL=[NSURL URLWithString:[UrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *tempData=[NSData dataWithContentsOfURL:imageURL];
UIImage *imgData=[UIImage imageWithData:tempData];
dispatch_async(dispatch_get_main_queue(), ^{
if (tempData!=nil) {
((FXImageView *)view).image = imgData;
[_images addObject:imgData];
}
else{
((FXImageView *)view).image = [UIImage imageNamed:@"NoImage.png"];
[_images addObject:[UIImage imageNamed:@"NoImage.png"]];
}
});
})
我也试过NSOperationQueue
但是没有成功。
答案 0 :(得分:0)
dispatch_queue_t queue;
queue = dispatch_queue_create("com.example.MyQueue", NULL);
dispatch_async(queue, ^(void){
NSString *UrlStr=urlString;
NSURL *imageURL=[NSURL URLWithString:[UrlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
NSData *tempData=[NSData dataWithContentsOfURL:imageURL];
UIImage *imgData=[UIImage imageWithData:tempData];
dispatch_async(dispatch_get_main_queue(), ^{
if (tempData!=nil) {
((FXImageView *)view).image = imgData;
[_images addObject:imgData];
}
else{
((FXImageView *)view).image = [UIImage imageNamed:@"NoImage.png"];
[_images addObject:[UIImage imageNamed:@"NoImage.png"]];
}
});
})
不一样......我没有回复评论。我创建了一个串行队列,你使用了一个并发队列。按照链接来理解背后的理论。
答案 1 :(得分:0)
在NSOperationQueue
设置为maxConcurrentOperationCount
的情况下尝试1
,但请注意,在这种情况下,您应将图像下载实现为NSOperation
子类。请查看NSOperation
上的Apple documentation,了解如何实施异步NSOperation
。