3

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];    
}

操作の成功ブロックが実行された後、files( responseObject) が解放されていないように見えます。これが、メモリ フットプリントを継続的に増加させている原因ですか? これは正しいです?AFNetworking と operationQueue を意図したとおりに使用していますか?

4

1 に答える 1

0

forループ内に@autoreleasepoolを配置することをお勧めします。

于 2012-12-21T00:23:24.040 に答える