UIImageView + AFNetworking管理缓存&分配

时间:2015-02-16 18:54:33

标签: uitableview uiimageview afnetworking nsurlcache image-caching

我正在使用UIImageView+AFNetworking下载并显示UITableView中网址的图片。一切都很好,我的问题是围绕缓存元素和&使用此调用实现的分配。

在使用工具跟踪内存时,我看到当我滚动我的最大内存分配时,快速变为此VM: Foundation,看起来好像是以某种方式缓存我正在下载的图像。

enter image description here

对于用户来说,当查看相同的图像但我从未看到它释放内存时,这是非常好的。 (我还没能把它发送到内存警告)。我只是想确保在需要时这个分配将在需要时释放。以下是VM : Foundation

的堆栈跟踪

enter image description here

我是否需要监视此内容并在需要时释放缓存内存以确保顺畅滚动?或者还有什么我应该看的,以确保妥善处理?

以下是我在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) {

        }];

1 个答案:

答案 0 :(得分:3)

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

它将图像内部存储在NSCache内,docs说:

  

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

但是,在AFNetworking开发期间,有一些troubles具有此自动删除行为,因此最终在接收UIApplicationDidReceiveMemoryWarningNotification时添加了手动缓存clearing。但这一切都在内部发生,你不应该自己做。