如何在ios中执行多个异步请求

时间:2014-09-28 16:54:50

标签: ios multithreading nsurlconnection sendasynchronousrequest

我有一个UITableView显示(医生图片,医生姓名)

cellForRowAtIndexPath 功能中,我按照以下方式获取图片:

 [NSURLConnection sendAsynchronousRequest:request
                                           queue:[NSOperationQueue mainQueue]
                               completionHandler:^(NSURLResponse * response,
                                                   NSData * data,
                                                   NSError * error) {
                                   if (!error){

                                           dispatch_async(dispatch_get_main_queue(), ^{
                                        updateCell.DRImage.image = [[UIImage alloc] initWithData:data];      
                                }];

问题是:当我快速向下滚动时,图像开始加载,并且几乎有100张图像被加载,然后当我点击行显示医生的详细信息时,我无法从服务器获取数据,直到所有图像都完成加载(直到所有异步请求完成)。

我正在使用以下代码获取医生的详细信息:

SoapCall *Obj = [[SoapCall alloc] init];
NSString* Url=[[NSString alloc] initWithFormat:@"%@/doctorsDetails.php?i=%@" , ServerUrl ,DoctorDataFromTableView.Doctor_ID];

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
dispatch_async(queue, ^{

[Obj CallUrl:Url OnCompletion:^(NSMutableArray * Results , NSError * Error){

    dispatch_async(dispatch_get_main_queue(), ^{

        Nviews.text =[[Results objectAtIndex:0] objectForKey:@"numViews"];

        NComments.text =[[Results objectAtIndex:0] objectForKey:@"totComments"];
});
}];

注意:SoapCall是我用来向服务器发出异步请求的自定义类

我的问题是: 有没有办法取消加载图像???

或者我可以在不同的帖子中加载Doctor详细信息???

1 个答案:

答案 0 :(得分:0)

我发现了一个很棒的项目,即“SDWebImage”

https://github.com/rs/SDWebImage

它以非常先进的方式使用NSoperationQueueNSOperation 这个项目为我节省了很多时间