AFNetworking 下载多个文件内存占用

Posted

技术标签:

【中文标题】AFNetworking 下载多个文件内存占用【英文标题】:AFNetworking downloading multiple files memory footprint 【发布时间】:2012-11-20 06:22:29 【问题描述】:

我正在使用 ARC,但在使用 AFNetworking 时在我的应用程序中下载多个文件 (10000+) 时遇到问题。我正在创建每个 AFHTTPRequest,然后将它们排队执行。当我使用仪器运行它时,我可以看到内存使用量越来越大,直到所有文件都下载完毕,然后才释放所有内存。这可以在模拟器上运行,但在 ios 设备上运行时会崩溃。

下面是我正在做的示例代码

for (int i = 0; i < NUM_OF_FILES_TO_DOWNLOAD; i++) 
    _imageCounter++;
    [self downloadFile:i];


- (void)downloadFile:(NSUInteger)num
    
    NSString *fileURL = @"file/%d/", num];
    NSURLRequest *url = [self.httpClient requestWithMethod:@"GET" path:fileURL parameters:nil];

    AFHTTPRequestOperation *requestOperation = [_httpClient HTTPRequestOperationWithRequest:url success:^(AFHTTPRequestOperation *operation, id responseObject) 
     ...
     failure:^(AFHTTPRequestOperation *operation, NSError *error) 
     ...
    ];

    [_httpClient enqueueHTTPRequestOperation:requestOperation];    

在执行操作成功块后似乎没有释放文件(responseObject),这就是不断增加内存占用的原因?它是否正确?我是否按预期使用了 AFNetworking 和 operationQueue?

【问题讨论】:

那么解决方案是什么? 【参考方案1】:

您可能希望在 for 循环中放置一个 @autoreleasepool。

【讨论】:

不要认为这行得通。文件被异步传递到成功块。在 for 循环中创建自动释放池无济于事

以上是关于AFNetworking 下载多个文件内存占用的主要内容,如果未能解决你的问题,请参考以下文章

Gsutil 在下载具有大量进程的多个文件时使用大量内存

AFNetworking 内存不足问题

请问用Java代码,怎样测试一段程序占用了多少内存?

ios leaks afnetworking3.0多处内存泄露怎么回事

Flask下载多个文件

AFNetworking/NSURLSession耗时长创建100多个任务下载文件