3

我正在使用一个表格视图,它从文档目录中加载图像,创建一个缩略图并将其显示在表格视图中。但是,我有一个问题:使用相机拍摄的图片很大,它变得很慢并且崩溃。

我已经探索了几种解决方案,包括 GCD 在后台线程中完成工作,但结果是一样的。所以,我想研究一下 SDWebImage 但我不知道它是否也适用于本地文件,在这种情况下不适用于网络图像。有人可以给我建议吗?如果不是,这个问题如何解决?是否有 API 可以帮助解决此问题?

4

1 回答 1

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了解更多详情。

希望有帮助

于 2012-10-09T05:39:56.580 回答