我有一个带有自定义单元格的 UITableView,其中显示了文本和图像。(右侧的图像)。起初,一切正常,但后来我注意到滚动时,整个 tableview 都滞后了。这是因为当重新使用它们时,该应用程序可能会在单元格进入屏幕时下载单元格图像。我添加了一个 NSCache 来存储下载的图像,并告诉 cellForRowAtIndexPath 加载 imageName(如果存在),否则,再次从 Internet 下载。然而,缓存是如此的短期存储,如果我用主页按钮退出我的应用程序,然后重新进入,那么只剩下一些图像,并且必须再次下载图像。
我试图找出比缓存更长期存储图像的最佳方法。我已经阅读了一些关于 NSDirectory 和存储在应用程序库中的信息,但还没有弄清楚..
我相信,最合乎逻辑的解决方案是做这样的事情:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
/*stuff*/
NSString *imageName = [dictionary objectForKey:@"Image"];
UIImage *image = [--Cache-directory-- objectForKey:imageName]; //Try to get it from cache
if(image) //If image was received from cache:
{
cell.imageView.Image = image;
}
else //If not in cache:
{
image = [--local-directory-- objectForKey:imageName]; //Check some local directory
if(image) //If image received from directory:
{
cell.imageView.Image = image;
// + Also save it to the cache?
}
else //If image was in neither cache or local directory, get it from the website with given URL
{
image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:imageURL]];
//Then save to cache and to file?
}
}
}
图像很少更改或切换,但我愿意事先在应用程序中实现它们,因此我必须在每次添加图像时发布更新。
这在我看来是合乎逻辑的。我在正确的轨道上吗?以及如何“调用”本地目录?就像,如果我将图像添加到 NSDirectory 对象或其他东西,这不是每次都会重置吗?如何访问本地文件夹?