iPhone:imageWithContentsOfFile的UITableView性能问题

时间:2011-12-07 11:42:09

标签: iphone performance image uitableview

当我使用imageWithContentsOfFile而不是imageNamed时,我在UITableView滚动中遇到了性能问题。以下是我的代码:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
UniversalAppAppDelegate *delegate = (UniversalAppAppDelegate *) [[UIApplication sharedApplication] delegate];
NSDictionary *res = [[delegate comments] objectAtIndex:indexPath.section];

if (cell == nil) 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];

 ......

// This line has a problem...when I use imageNamed here instead of imageWithContentsOfFile, it works absolutely fine
imageView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:imagepath]];
[imageView setFrame: CGRectMake(30, 10, 55, 55)];
[sectionHeaderView addSubview:imageView];

......

cell.backgroundView = sectionHeaderView;
return cell;

我还尝试了caching图像,但问题仍然存在。只有imageNamed工作得很好但我无法使用它,因为我需要指定存储在文档文件夹中的图像的路径并动态更改。谁能告诉我怎么能解决这个问题?

缓存代码:

NSMutableDictionary *thumbnailCache = [[NSMutableDictionary alloc] init];

- (UIImage*)thumbnailImage:(NSString*)fileName
{
UIImage *thumbnail = [thumbnailCache objectForKey:fileName];

if (nil == thumbnail)
{
    NSString *thumbnailFile = [self filePath:fileName];
    thumbnail = [UIImage imageWithContentsOfFile:thumbnailFile];
    [thumbnailCache setObject:thumbnail forKey:fileName];
}
return thumbnail;
}

用法:

imageView = [[UIImageView alloc] initWithImage:[delegate thumbnailImage:[res objectForKey:@"ImageName"]]];

1 个答案:

答案 0 :(得分:2)

您可以尝试在控制器的viewDidLoad方法中构建一个UIImages数组,并在cellForRowAtIndexPath中使用该数组中的图像。

这将消除在绘制tableview时为每个图像调用imageWithContentsOfFile的需要。

例如,您可以在单独的线程中构建数组,并在发生这种情况时显示加载指示符。这首先意味着一个小的加载时间,但是平滑的滚动表视图。