2012-07-11 50 views
2

之前有人说这个话题被重复几次,请注意,我真的不需要从网上加载远程图像(SDWebImage github解决方案),我试图加载图像动态保存在文档文件夹,所以他们是本地的时候,我想加载他们在我的tableView引用他们通过sqlite表中的一个记录,我保存了图像名称,因为它是由代码生成的。如何在不影响向下滚动性能的情况下将本地图像加载到UITableView中?

所以在某一个点解析在我的cellForRowAtIndexPath方法我所有的sqlite的数据,之后我有下面的代码行:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    ... 
    NSString *imageName = [[favorites objectAtIndex:[indexPath row]] objectForKey:@"imagename"]; 
    cell.image.image = [self loadImage: imageName]; // Is a custom cell so cell.image is a UIImageView, and I'm setting its image property 
    ... 
} 

而且我的LoadImage方法是这样的:

- (UIImage*)loadImage:(NSString*)imageName { 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.png", imageName]]; 

    return [UIImage imageWithContentsOfFile:fullPath]; 

} 

注此外,这段代码实际上工作,但向下滚动表看起来很差。我如何提高性能,我的意思是在后台加载图像,但图像已经存在。有人能给我一个具体的解决方案吗?

为了让您知道,我正在使用iOS 5和ARC。

任何帮助将不胜感激。

+0

你想加载的图片大小是多少?大视网膜图像可能无法实时加载和显示(即平滑滚动时小于1/60秒)。您应该尽量减少图像文件的大小(如果可以的话,请尽量使用高度压缩的JPEG格式),并且还可以尝试加载并强制在后台解压缩图像(因为UIKit只在绘制之前解压缩),但内存可能会变成问题。参见[这里](例如http://ioscodesnippet.tumblr.com/post/10924101444/force-decompressing-uiimage-in-background-to-achieve)。 – Guillaume 2012-07-11 19:06:31

+0

好吧,我刚刚阅读您发布的链接,但我不明白我怎么能在桌面背景中做到这一点。我的意思是,我应该使用类似于cell.image.image =执行背景bla bla的东西,但在滚动期间,这些图像将出现在适当的位置或单元格实例将重叠并加载可见点单元格中的前一图像。显示新行或者可能会加载图像,但不刷新它所指的行。有点混淆这一切。 – Renexandro 2012-07-11 19:49:19

回答

0

首先减小您加载的图像大小。

其次尝试使用GCD在tableView:cellForRowAtIndexPath:中加载图像。

相关问题