1. ホーム
  2. objective-c

[解決済み] AFNetworkingでタイムアウトを設定する方法

2023-08-08 02:15:32

質問

私のプロジェクトはAFNetworkingを使用しています。

https://github.com/AFNetworking/AFNetworking

どのようにタイムアウトをダイヤルダウンしますか。現在、インターネット接続がない場合、フェイル ブロックは約 2 分間トリガーされません。長すぎます...。

どのように解決するのですか?

タイムアウト間隔を変更することは、あなたが説明している問題に対する最善の解決策ではないことはほぼ確実です。代わりに、あなたが実際に望んでいることは、HTTP クライアントがネットワークが到達不能になることを処理することであるように思えますが、違いますか?

AFHTTPClient は、インターネット接続が失われたときにそれを知らせるメカニズムをすでに内蔵しています。 -setReachabilityStatusChangeBlock: .

低速のネットワークではリクエストに長い時間がかかることがあります。iOS が遅い接続に対処する方法を知っていて、接続がまったくない場合との違いを教えてくれることを信頼する方がよいでしょう。


このスレッドで言及された他のアプローチをなぜ避けるべきかについての私の理由を説明するために、いくつかの考えを紹介します。

  • リクエストは開始される前にキャンセルされる可能性があります。リクエストをキューに入れることは、それが実際にいつ開始されるかについて何の保証もありません。
  • タイムアウト間隔では、長時間実行されるリクエスト (特に POST) はキャンセルされないはずです。100MB の動画をダウンロードまたはアップロードしようとしている場合を想像してみてください。遅い 3G ネットワークで可能な限りリクエストが進行している場合、予想よりも少し時間がかかっている場合に、なぜ不必要にそれを停止しなければならないのでしょうか?
  • 実行中 performSelector:afterDelay:... は、マルチスレッドアプリケーションでは危険です。これは、不明瞭でデバッグが困難な競合状態に対して自分自身を開放してしまいます。