NSCache,图像释放,异步队列

时间:2013-02-22 17:55:38

标签: ios interface nsstring selector

除非存在该索引路径的图像,否则应该在我的任何给定表行中显示占位符。当我向下滚动时,前一个indexPath中的图像加载到默认值而不是释放。我知道之前有人帮我解决了同样的问题,但这是在我意识到缓存图像的重要性之前。在我的customCell方法中,我将UIImage属性设置为strong,然后发布viewDidUnload的图像。

NSString *imagename = [_imageCache objectForKey:indexPath];
UIImage *preview = [_imageCache objectForKey:imagename];

if (preview)
{
    [[cell myImageView] setImage:preview];
}
else
{
    [[cell myImageView] setImage:[UIImage imageNamed:@"CellLogo.png"]];

            dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0ul);
            dispatch_async(queue, ^{

             //   __block UIImage *preview = nil;               
               UIImage *preview = [UIImage imageWithData:object.iG];
              //             }
         if (preview)
         {
                dispatch_async(dispatch_get_main_queue(), ^{

                 //   if (cell)
                    [[cell myImageView] setImage:preview];

                });
             [_imageCache setObject:preview forKey:imagename];
         }
            });
}

2 个答案:

答案 0 :(得分:1)

如错误消息所示,您尚未在代码中的任何位置声明imageFilename:。默认情况下没有这样的方法,如果您希望可以在当前类中以该名称定义方法:

- (NSString *)imageFilename:(NSIndexpath *)indexpath {
  //code here
}

如果您已经在其他地方使用过它,则需要导入该特定类并将此方法称为NSString *imagename = [myobject imageFilename:indexPath];,其中myobject是该类的对象。

答案 1 :(得分:1)

查找“细胞重用”。您需要在UITableViewCell子类中实现-prepareForReuse。它应该将图像重置为占位符或空白图像。