异步图像表视图xcode,但是

时间:2014-07-23 12:46:30

标签: objective-c xcode image uitableview load

我在单元格中使用异步加载图像。 我的代码是:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *const ImageCellId = @"ImageCell";
    PDATableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ImageCellId];
    if (cell == nil) {
        cell = [[PDATableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ImageCellId];
    }

    Tutorial *thisTutorial = [_objects objectAtIndex:indexPath.row];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSURL *tutorialsUrl8 = [NSURL URLWithString:thisTutorial.url]];
        NSData *tutorialsHtmlData2 = [NSData dataWithContentsOfURL:tutorialsUrl8];
        TFHpple *tutorialsParser2 = [TFHpple hppleWithHTMLData:tutorialsHtmlData2];
        NSString *tutorialsXpathQueryString2 = @"//div[@class='photo']/img";
        NSArray *tutorialsNodes2 = [tutorialsParser2 searchWithXPathQuery:tutorialsXpathQueryString2];
        for (TFHppleElement *element2 in tutorialsNodes2) {
            tutorial2 = [[Tutorial alloc] init];
            tutorial2.url = [element2 objectForKey:@"src"];
            data2 = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:tutorial2.url]];     
        }

        if(data2)
        {
            imageMain = [UIImage imageWithData:data2];
            if (imageMain) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    if (cell)
                        cell.cellImageView.image = imageMain;
                });
            }
        }
    });

    return cell;
}

有效!但!当我滚动TebleView时,我再次加载了图像。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

您正在异步加载图像。这很好,但你没有应用任何缓存机制。

通过缓存机制,我指的是一种检查图像是否已经下载的方法。如果下载一次,则不应再次下载图像,而是使用已下载的图像。

这些下载的图像应该保存在本地,以便每次应用程序处于活动状态时都可以使用它们。它很容易实现这种图像缓存机制,但它更好地使用现有的api,它们得到了很大的改进和优化。

SDWebImage是异步加载图像的最佳方式。

您可以使用SDwebImage,下载图像并将其保存在缓存中(以加快速度)并在本地保存图像。

另外,为了了解其他缓存apis,您可以查看此内容。我总是喜欢SDWebImage,因为它非常好而且快速。 link

希望这会对你有所帮助。快乐的编码:)