0

N行のテーブルがあります。各行はダウンロードするファイルに関連付けられているため、ダウンロードするオーディオ ファイルのシリアル キューを実行する必要があります。各行には、そのファイルがダウンロード中か待機中かを示す小さなアイコンを表示する必要があります。オーディオ ファイルが完全にダウンロードされたら、NSNotifications を使用して UI を更新し、単純にパスして次の行をダウンロードします。これまでのところ、私はこれを思いつきましたが、うまくいきました。

swpadq.queue = dispatch_queue_create("com.audioDownload", DISPATCH_QUEUE_SERIAL);

dispatch_async(_queue, ^{
    NSURLRequest *urlRequest_ = [NSURLRequest requestWithURL:audioURL_
                                                 cachePolicy:NSURLRequestReloadIgnoringCacheData
                                             timeoutInterval:60.0f];

    NSError *error_;

    NSLog(@"downloading %@", [audioURL_ absoluteString]);

    NSData *data_ = nil;

    data_ = [NSData dataWithContentsOfURL:audioURL_
                                  options:NSDataReadingUncached
                                    error:&error_];

    /*data_ =  [NSURLConnection sendSynchronousRequest:urlRequest_
     returningResponse:nil
                                              error:&error_];*/

    });

唯一の「小さな」問題は、メモリが増加し、すべてのファイルが完全にダウンロードされるまでキャッシュを保持し、現時点でのみメモリが解放されることです。ダウンロードするファイルが何百もありますが、これは問題です。どうすればこれを解決できますか?

また、各 nsurlrequest でシリアル ブロックが保持している強力な保持サイクルを削除するために、キャッシュを解放または無効化 (ARC を使用しています) するにはどうすればよいですか? すべてのオブジェクト(特にURLキャッシュ)を解放するためにキューが完了すると、GCDが何をするのか本当にわかりません。

4

1 に答える 1