Ios 关于UITableViewCell缩略图缓存的建议

Ios 关于UITableViewCell缩略图缓存的建议,ios,objective-c,uitableview,caching,Ios,Objective C,Uitableview,Caching,我正在使用UITableView显示用户保存在应用程序文档目录中的图像列表。这些图像很大,或多或少与iPad屏幕的大小和分辨率相同。我尝试使用此代码在每次显示表视图时生成缩略图,但这样做当然需要很长时间,尤其是在保存了大量图像的情况下: NSString *filePath = [_documentsDirectory stringByAppendingPathComponent:basicFileName]; CGImageSourceRef imageSource = CGImageSou

我正在使用UITableView显示用户保存在应用程序文档目录中的图像列表。这些图像很大,或多或少与iPad屏幕的大小和分辨率相同。我尝试使用此代码在每次显示表视图时生成缩略图,但这样做当然需要很长时间,尤其是在保存了大量图像的情况下:

NSString *filePath = [_documentsDirectory stringByAppendingPathComponent:basicFileName];

CGImageSourceRef imageSource = CGImageSourceCreateWithURL((CFURLRef)[NSURL fileURLWithPath:filePath], NULL);

if (!imageSource) // if no image available, we have a folder
{
    cell.imageView.image = [UIImage imageNamed:@"FolderIcon"];
}
else
{
    CFDictionaryRef options = (__bridge CFDictionaryRef)[NSDictionary dictionaryWithObjectsAndKeys:
                                                         (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailWithTransform,
                                                         (id)kCFBooleanTrue, (id)kCGImageSourceCreateThumbnailFromImageIfAbsent,
                                                         (id)[NSNumber numberWithFloat:kDefaultCellHeight], (id)kCGImageSourceThumbnailMaxPixelSize,
                                                         nil];

    CGImageRef imgRef = CGImageSourceCreateThumbnailAtIndex(imageSource, 0, options);

    UIImage *scaledDownImage = [UIImage imageWithCGImage:imgRef];

    CGImageRelease(imgRef);
    CFRelease(imageSource);

    cell.imageView.image = scaledDownImage;
}

为了减少延迟,我试图想出一种方法,当用户第一次点击按钮以显示表视图时,缩略图已经创建并存储在缓存中。我将缩略图创建移动到应用程序代理中的didFinishLaunchingWithOptions,并将它们保存到应用程序的缓存文件中。这将需要更多的工作才能使其成为一个可靠和高效的解决方案,但我突然想到,我可能在ImageIO中缺少了一些可以高效处理此问题而无需编写大量代码的内容。ImageIO上的文档似乎没有太多细节。我是否可以只创建一次缩略图,然后将它们嵌入图像的原始PNG文件中?或者是否有其他方法可以轻松缓存或存储这些缩略图,以便随时快速访问?

您可以将缩略图存储为单独的文件。您也可以让用户将照片存储在照片库中,这将允许您使用ALAsset的
缩略图
属性。您还可以将您的实现与下载图像并将其缓存到磁盘的源代码进行比较。谢谢。我想我试图避免的是,对于用户采取的每一个操作都必须管理两个文件,而不是一个文件。例如,如果用户删除或更改图像的名称,我必须在原始图像和缩略图上都设置目标代码。我认为框架中可能会有一些东西以一种简单的方式处理这个问题。很遗憾,照片库不是此应用程序的选项。该应用程序确实提供了对照片库的访问,但还需要有一个独立的存储保存在应用程序中的图像的商店。