使用SDWebImage将文档目录中的本地映像加载到tableview

时间:2012-10-09 04:12:40

标签: ios performance tableview local sdwebimage

我正在使用一个tableview,它从文档目录中加载图像,创建一个缩略图并在tableview中显示它。但是,我遇到了一个问题:由于照片很大,使用相机拍摄时会变慢和崩溃。

我已经探索了几种解决方案,包括GCD,以便在后台线程中完成工作,但结果是一样的。所以,我想查看SDWebImage,但我不知道它是否也适用于本地文件,而不是这种情况下的Web图像。有人可以告诉我吗?如果没有,这个问题怎么解决了?是否有可以帮助解决此问题的API?

1 个答案:

答案 0 :(得分:0)

这个问题不容易回答,因为问题被广泛提出但我会尽我所能。

首先,我通常会调度一个后台线程,如果我有昂贵的处理来阻止主线程,这是非常重要的。 我真的不知道为什么你没有使用正常的UIImageView来做你正在做的事情,但试着实现以下内容:

    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"YourCell";
    MyCellClass *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[MyCellClass alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }
/*
 Whatever Code you want 
*/
    NSArray* params =@[cell.myImageView, @"http://myfancyimages.com/image.png"];
    [self performSelectorInBackground:@selector(loadEventImageWithParameters:) withObject:params];
    return cell;
}

现在添加功能:

- (void) loadEventImageWithParameters:(id) parameters {
    NSArray* params = [[NSArray alloc] initWithArray:(NSArray*)parameters];
    NSURL *url = [NSURL URLWithString:[params objectAtIndex:0]];
    UIImage *image = [UIImage imageWithData: [NSData dataWithContentsOfURL:url]];
    UIImageView* theImageView = (UIImageView*) [params objectAtIndex:0];
    [theImageView setImage:image];
}

如果你有很多图片要加载,你最好排队你的进程,这样你就不会用Grand Central Dispatch“窃取”所有资源。 请阅读这篇优秀的帖子http://www.raywenderlich.com/4295/multithreading-and-grand-central-dispatch-on-ios-for-beginners-tutorial以获取更多详细信息。

希望有所帮助