使用GCD在UITableviewCell中异步加载和缓存图像

时间:2014-01-16 05:47:09

标签: ios iphone objective-c uitableview

我正在使用json数据在UITableview中显示图像并获取图像。但数据显示在UITablevewcells中。但图像并没有显示出来。显示图像需要时间。所以我想使用GCD异步显示我的uitableview的图像。但我不知道异步GCD Concept.Please让我知道如何在我的编码中应用异步GCD概念。请给我指导任何身体。 这是我的代码。

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{    
   [UIApplication sharedApplication].networkActivityIndicatorVisible=YES;
   NSError *err;
   NSString *strResponse=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];
   NSLog(@"response is %@",strResponse);
   dit=[NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&err];
   NSArray *arrResults = [dit valueForKey:@"classifieds_mst"];
   listOfObjects = [NSMutableArray array];

for(dictRes in arrResults) {
 Attributes *at = [[Attributes alloc]init];      
at.classimage=[dictRes valueForKey:@"image_name"];
[listOfObjects addObject:at];
 }

[tableView reloadData];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
     static NSString *identifier=@"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];

    if (cell == nil)
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"identifier"];
     }
    classifiedimage=[[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 300, 80)];
    [cell.contentView addSubview:classifiedimage];
     NSString *str;
    str=att.classimage;
    if(str==nil) {
        classifiedimage.image=[UIImage imageNamed:@"image.png"];
    } else{
    url=@"My url";
     NSString *addurl=[url stringByAppendingString:str];
    classifiedimage.image = [UIImage imageNamed:addurl];
     }
return cell;
}

3 个答案:

答案 0 :(得分:1)

你可以尝试这个,在cellForRowAtIndexPath方法中异步加载图像,这里我得到图像的url并使用延迟加载。

dispatch_queue_t concurrentQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(concurrentQueue, ^{

    dispatch_async(dispatch_get_main_queue(), ^{

        NSString *imageStr=[@"urlLink" stringByAppendingString:[populerPostImageArray objectAtIndex:indexPath.row]];

        [cell.myImgView setImageWithURL:[NSURL URLWithString:imageStr] placeholderImage:[UIImage imageNamed:@"nopic.png"]];
    });
});

答案 1 :(得分:0)

您可以使用延迟加载概念来加载图像。请参阅以下链接:https://github.com/rs/SDWebImage

答案 2 :(得分:0)

如果您需要加载和缓存图片,可以使用APSmartStorage。 它支持下载,内存和磁盘缓存,并自动清除内存警告。 像魅力一样工作:)