IOS 中 AFNetworking 缓存图像中的内存泄漏

Posted

技术标签:

【中文标题】IOS 中 AFNetworking 缓存图像中的内存泄漏【英文标题】:Memory leak in AFNetworking Cache images in IOS 【发布时间】:2012-04-10 11:21:54 【问题描述】:

我刚从 ASIHTTP 迁移到 AFNetworking 库。我还在使用 Olivier Poitrey 和 Peter Steinberg 的 SDURLCache 库。我想缓存我将在我的应用程序中使用的所有图像。对于这些,我尝试了这个:

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        for(NSURLRequest *imageRequest in imageRequestArray)
            AFURLConnectionOperation *operation2 = [[[AFURLConnectionOperation alloc] initWithRequest:imageRequest] autorelease];
            [queue addOperation: operation2];
            [operation2 waitUntilFinished];

当我需要显示图像时,我会为每张图像执行此操作:

  NSURL *url = [NSURL URLWithString:[cat imagePath]];
        NSURLRequest *imageRequest = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReturnCacheDataElseLoad timeoutInterval:30.0];


        AFImageRequestOperation *operation = [AFImageRequestOperation imageRequestOperationWithRequest:imageRequest 
                                                                                  imageProcessingBlock:nil
                                                                                             cacheName:@"nscache"
                                                                                               success:^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image)
                                                                                                   //NSData *responseData = [request responseData];
                                                                                                   imageView.alpha = 0.0;
                                                                                                   [imageView setImage:image forState:UIControlStateNormal];
                                                                                                   [UIView beginAnimations:@"ToggleViews" context:nil];
                                                                                                   [UIView setAnimationDuration:1.0];                
                                                                                                   imageView.alpha = 1.0;
                                                                                                   [UIView commitAnimations];
                                                                                               
                                                                                               failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error)
                                              ];
        [operation start];

一段时间后,应用程序发出内存警告,然后关闭。为此,我做了以下工作:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application 
[[NSURLCache sharedURLCache] removeAllCachedResponses];
NSLog(@"Memory Warning...");

它清除了缓存(我不知道什么),但过了一会儿,应用程序又关闭了。

我该怎么做?

【问题讨论】:

我相信我遇到了类似的问题,当我使用 Instruments 检查时,我的应用程序的内存使用量一直在上升,直到达到大约 200 兆,然后应用程序由于内存警告而终止,我正在尝试为了追查问题,似乎没有任何泄漏 【参考方案1】:

问题可能是因为 ARC 没有自动设置在队列或后台线程上。我遇到了同样的问题,并通过以下文章解决了它:

https://agilewarrior.wordpress.com/2012/04/09/memory-leaks-with-arc/

【讨论】:

以上是关于IOS 中 AFNetworking 缓存图像中的内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

iOS 中的永久图像缓存

缓存策略,AFNetworking

使用 AFNetworking 缓存更大的图像

AFNetworking 获取图像,如果它被修改

如何在巨大的 CollectionView 中使用 SDWebImage 或 AFNetworking 在磁盘上缓存图像?

使用 AFNetworking 从 ios 中的照片库上传图像?