0

我使用 是UIImageView+AFNetworking为了从UITableView. 一切都很好,我的问题是关于这个调用实现的缓存元素和分配。

在使用工具来跟踪内存时,我发现当我滚动时,我最大的内存分配很快变成了这个VM: Foundation,看起来好像它正在以某种方式缓存我正在下载的图像。

在此处输入图像描述

当查看相同的图像但我从未看到它释放内存时,这对用户来说非常有用。(我还没有得到内存警告)。我只是想确保在需要时这个分配将在需要时释放。下面是那些的堆栈跟踪VM : Foundation

在此处输入图像描述

我是否需要监控这一点并在需要时释放缓存的内存以确保平滑滚动?或者还有什么我应该注意的以确保正确处理吗?

这是我在cellForRowAtIndexPath调用setImageWithURLRequest. 任何建议或改进将不胜感激。

   NSString *imageURL = [NSString stringWithFormat:@"https://IMAGE-URL/%@",imageURL];
        __weak MainTableViewCell *weakCell = cell;
        NSURLRequest *urlRequest = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:imageURL]];

        [cell.postImage setImageWithURLRequest:urlRequest placeholderImage:nil success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) {

            MainTableViewCell *strongCell = weakCell;
            strongCell.postImage.image = image;

            [UIView animateWithDuration:.15 animations:^{
                strongCell.postImage.alpha = 1;
            }];

        } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {

        }];
4

1 回答 1

3

您真的不应该担心清除图像缓存,因为AFNetworking它会自动为您处理。

NSCache正如文档所说,它在内部存储图像:

包含各种自动删除策略,确保它不会使用过多的系统内存。如果其他应用程序需要内存,系统会自动执行这些策略。调用时,这些策略会从缓存中删除一些项目,从而最大限度地减少其内存占用。

但是,在AFNetworking开发过程中,这种自动清除行为存在一些问题,因此最终在接收时添加了手动清除UIApplicationDidReceiveMemoryWarningNotification缓存。但这一切都发生在内部,你不应该自己做。

于 2015-02-16T19:37:38.060 回答