当我使用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"]]];
答案 0 :(得分:2)
您可以尝试在控制器的viewDidLoad
方法中构建一个UIImages数组,并在cellForRowAtIndexPath
中使用该数组中的图像。
这将消除在绘制tableview时为每个图像调用imageWithContentsOfFile
的需要。
例如,您可以在单独的线程中构建数组,并在发生这种情况时显示加载指示符。这首先意味着一个小的加载时间,但是平滑的滚动表视图。