0

以下を使用して HTTP 呼び出しを行う CONNECT オブジェクトがあります。

NSURLConnection* connection = [NSURLConnection connectionWithRequest:urlRequest delegate:self];

メソッドでは- (void)connectionDidFinishLoading:(NSURLConnection*)connection、ファイルに書き込みます。

CONNECT オブジェクトの複数のインスタンスから複数の HTTP 呼び出しが送信される可能性があるため、接続が終了したときに、これらの CONNECT オブジェクトが同時にファイルに書き込むリスクがあると思います。

これは正しいです ?はいの場合、どうすればこれを防ぐことができますか?

4

2 に答える 2

1

スレッドが 1 つしかない場合は、デリゲートが同じスレッドで実行されるため、問題はありません。
デリゲートは、シングル スレッド環境で次々と実行されます。DelegateMehtod1 がファイルにアクセスしていて、DelegateMehtod2 が原因で一時停止し、次に DelegateMehtod2 がファイルにアクセスする場合はありません。これは、1 つのスレッドを持つ複数のデリゲートではなく、複数のスレッドでのみ発生します

マルチスレッド環境の場合は、ファイル アクセス コードを同期する必要があります。

于 2012-07-09T14:58:39.337 に答える
1

2つのこと:

1) すべての NSURLConnections を 1 つのスレッド (おそらくメイン スレッド) で実行している場合、書き込み全体 (つまり、open/create) を実行している限り、ファイルへの書き込みに問題はありません。 、書き込み、閉じる) connectionDidFinishLoading メソッド内。これは、1 つのスレッドが一度に 1 つのことしか実行できないためです。

2) 設計面では、複数の接続で同じファイルに書き込みたいですか? 多くの NSURLConnections を作成している場合は、通常、それらを記録し、一意のファイル名を付けて、個別に処理できるようにする必要があります。これにより、現在飛行中の接続の数を確認したり、それらをキャンセルしたりできます。

処理中に一時的なデータをファイルに書き込んでいるだけの場合は、おそらくファイル名に一意の名前を使用してください。基本的に、完了時に同じファイルに多数の同時ダウンロードを書き込む正当な理由を考えるのは難しいと思いますが、おそらくあなたはそれを持っています!

于 2012-07-09T15:36:09.060 に答える