1

メインスレッドではなく、別のスレッドで NSURLDownload のデリゲートメソッドを受け取る方法を知っている人はいますか? 私は NSOperationQueue を使用してそれらを管理していますが、現時点では performSelectorOnMainThread メソッドを使用して機能させる必要があります。これに関する問題は、カーネル タスクが狂ってしまい、CPU サイクルの約 30% に達することです。不思議なことに、これはSLにアップグレードして以来、NSOperationQueueの動作が変わったときにのみ発生しました(私がそれを否定しているわけではありませんが、GCDは揺るぎません!)

ありがとうコリン

4

2 に答える 2

2

私の最初の質問は、NSURLDownload を使用して何をしているのですか? 大量のファイルをディスクにダウンロードしているだけですか、それとも本当にデータをメモリに保存したいですか?

  • 大量のファイルをディスクにダウンロードしていて、特別な処理をしたくない場合は、まず、NSOperationQueue を気にせずに、メイン スレッドですべての NSURLDownloads を起動してみます...つまり、いくつの操作について話しているのですか? それらはすべて同時に実行できますか? メインスレッドでのコールバックは、データを取得したという通知を受け取ったときに何か重いことをしていない限り、それほど問題にはなりません。

  • それ以外の場合は、NSURLConnection の使用に切り替えます。設定したスレッドでコールバックするように具体的に文書化されており、より柔軟です。もちろん、これはそれほど高度なものではないため、本当にファイルをディスクに保存したい場合は、自分で I/O を作成する必要があります。これは、4 行のコードを追加するようなものです。

-W

于 2009-09-20T09:14:33.130 に答える
0

バグがあったため、NSOperationQueue の動作を変更しました。今はとてもしっかりしているように見えますが、そうです、別の個性があります。参照 ( http://www.mikeash.com/?page=pyblog/dont-use-nsoperationqueue.html )

あなたの問題についてもっと情報を提供できますか?ダウンロードが完了したときにのみ通知する必要がありますか? 一度に多くのダウンロードを行っていますか?

于 2009-09-08T19:32:40.137 に答える