2012-11-20 28 views
3

我正在使用ARC,我在使用AFNetworking時在我的應用中下載多個文件(10000+)時出現問題。我正在創建每個AFHTTPRequest,然後將它們排隊等待執行。當我使用儀器運行時,可以看到內存使用量不斷增加,直到所有文件都被下載完畢,才釋放所有內存。這在模擬器上仍然存在,但在iOS設備上運行時會崩潰。AFNetworking下載多個文件的內存空間

下面是我在做什麼的樣本代碼

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?

+0

那麼解決方案是什麼呢? – Fab1n

回答

0

你可能想在你的for循環中放一個@autoreleasepool。

+0

不要以爲這會奏效。這些文件異步傳遞到成功塊。在for循環中創建一個autorelease池將無濟於事 –