NSURLSessionConfiguration には 2 つのタイムアウト設定があります。1 つは timeoutIntervalForRequest と呼ばれ、もう 1 つは timeoutIntervalForResource です。この 2 つの違いは何ですか?一般的にはどのような状況で設定されるのでしょうか?
学习是最好的投资!
次のテキスト: ここを参照timeoutIntervalForRequest と timeoutIntervalForResource は、リクエストとリソースのタイムアウト間隔を指定します。多くの開発者は、リクエストの送信にかかる合計時間を制限するために timeoutInterval を使用しようとしますが、これは timeoutInterval の意味、つまりメッセージ間の時間の意味を誤解しています。 timeoutIntervalForResource は、実際には全体的なタイムアウトの機能を提供します。この機能はバックグラウンド転送にのみ使用する必要があり、ユーザーが実際に待機したいものには使用できません。
自分自身をテストして理解する
特定の状況 (timeoutInterval、timeoutIntervalForResource、timeoutIntervalForRequest) では、これら 3 つの値がリクエストのタイムアウトをトリガーする可能性があります。
NSURLReaqstにtimeoutIntervalが設定されているかどうかの2つの状況で理解できます。
1. NSURLRequest timeoutInterval が設定されている場合: timeoutIntervalForRequest 設定を無視し、timeoutIntervalForResource と timeoutInterval の小さい方の値をタイムアウト時間として使用します。
2. NSURLRequest timeoutInterval が設定されていません: timeoutIntervalForRequest と timeoutIntervalForResource の小さい値がタイムアウト時間であり、Request timeoutInterval のデフォルトの 60 秒ではありません。
NSURLRequest と SessionConfiguration は、デフォルト値の 60 秒タイムアウトを使用するように設定されていません。
バックグラウンドセッションモードでのアップロードとダウンロードは、timeoutIntervalForRequest と timeoutInterval の設定を無視しますtimeoutIntervalForResource を使用します
NSURLRequest timeoutInterval-(デフォルトは60秒)
SessionConfigurationtimeoutIntervalForRequest- (デフォルトは 60 秒)timeoutIntervalForResource- (デフォルトは 7 日)
@property NSTimeInterval timeoutIntervalForRequest;Description追加データを待機するときに使用するタイムアウト間隔。このプロパティは、この構成に基づいてセッション内のすべてのタスクのリクエストのタイムアウト間隔を決定します。リクエスト タイムアウト間隔は、新しいデータを受信せずにリクエスト タイマーが指定された間隔に達するたびに、タスクが追加データの到着を待機する時間 (秒単位) を制御します。 デフォルト値は60です。重要元のリクエストがタイムアウトのために失敗した場合、バックグラウンドセッションによって作成されたアップロードまたはダウンロードタスクは自動的に再試行されます。アップロードまたはダウンロード タスクの再試行または転送を許可する期間を指定するには、timeoutIntervalForResource プロパティを使用します。AvailabilityiOS (7.0 以降)、macOS (10.9 以降)、tvOS (9.0 以降)、watchOS (2.0 以降)後ほど)
@property NSTimeInterval timeoutIntervalForResource;説明リソース要求に許容される最大時間。このプロパティは、この設定に基づいてセッション内のすべてのタスクのリソース タイムアウト間隔を決定します。リソースのタイムアウト間隔は、リソース全体の転送を中止するまでの待機時間 (秒単位) を制御します。リソース タイマーはリクエストが開始されると開始され、リクエストが完了するか、このタイムアウト間隔に達するまでカウントされます。 デフォルト値は 7 日です。 利用可能性iOS (7.0 以降)、macOS (10.9 以降)、 tvOS (9.0 以降)、watchOS (2.0 以降)
@property NSTimeInterval timeoutInterval;説明受信者のタイムアウト間隔 (秒単位)。 接続試行中にリクエストがタイムアウト間隔よりも長くアイドル状態のままの場合、リクエストはタイムアウトしたとみなされます。デフォルトのタイムアウト間隔は 60 秒です。原則として、短いタイムアウト間隔は使用しないでください。代わりに、ユーザーが長時間実行される操作を簡単にキャンセルできる方法を提供する必要があります。詳細については、「ネットワークの概要」の「リアルワールド ネットワークの設計」を参照してください。 利用可能性iOS (8.0 以降)、macOS (10.10 以降)、tvOS (9.0 以降)、watchOS (2.0 以降)
通常の場合、timeoutIntervalForRequest (文書によると、要求の要求の設定超過時間) と NSURLRequest timeoutInterval (個別の要求の設定超過時間) が設定されます
特殊事情况下(バックグラウンドセッションモード下上传、ダウンロード)設定timeoutIntervalForResource
次のテキスト: ここを参照
timeoutIntervalForRequest と timeoutIntervalForResource は、リクエストとリソースのタイムアウト間隔を指定します。多くの開発者は、リクエストの送信にかかる合計時間を制限するために timeoutInterval を使用しようとしますが、これは timeoutInterval の意味、つまりメッセージ間の時間の意味を誤解しています。 timeoutIntervalForResource は、実際には全体的なタイムアウトの機能を提供します。この機能はバックグラウンド転送にのみ使用する必要があり、ユーザーが実際に待機したいものには使用できません。
自分自身をテストして理解する
特定の状況 (timeoutInterval、timeoutIntervalForResource、timeoutIntervalForRequest) では、これら 3 つの値がリクエストのタイムアウトをトリガーする可能性があります。
NSURLReaqstにtimeoutIntervalが設定されているかどうかの2つの状況で理解できます。
1. NSURLRequest timeoutInterval が設定されている場合:
timeoutIntervalForRequest 設定を無視し、timeoutIntervalForResource と timeoutInterval の小さい方の値をタイムアウト時間として使用します。
2. NSURLRequest timeoutInterval が設定されていません:
timeoutIntervalForRequest と timeoutIntervalForResource の小さい値がタイムアウト時間であり、Request timeoutInterval のデフォルトの 60 秒ではありません。
NSURLRequest と SessionConfiguration は、デフォルト値の 60 秒タイムアウトを使用するように設定されていません。
バックグラウンドセッションモードでのアップロードとダウンロードは、timeoutIntervalForRequest と timeoutInterval の設定を無視します
timeoutIntervalForResource を使用します
NSURLRequest
timeoutInterval-(デフォルトは60秒)
SessionConfiguration
timeoutIntervalForRequest- (デフォルトは 60 秒)
timeoutIntervalForResource- (デフォルトは 7 日)
@property NSTimeInterval timeoutIntervalForRequest;
Description
追加データを待機するときに使用するタイムアウト間隔。
このプロパティは、この構成に基づいてセッション内のすべてのタスクのリクエストのタイムアウト間隔を決定します。リクエスト タイムアウト間隔は、新しいデータを受信せずにリクエスト タイマーが指定された間隔に達するたびに、タスクが追加データの到着を待機する時間 (秒単位) を制御します。
デフォルト値は60です。
重要
元のリクエストがタイムアウトのために失敗した場合、バックグラウンドセッションによって作成されたアップロードまたはダウンロードタスクは自動的に再試行されます。アップロードまたはダウンロード タスクの再試行または転送を許可する期間を指定するには、timeoutIntervalForResource プロパティを使用します。
AvailabilityiOS (7.0 以降)、macOS (10.9 以降)、tvOS (9.0 以降)、watchOS (2.0 以降)後ほど)
@property NSTimeInterval timeoutIntervalForResource;
説明
リソース要求に許容される最大時間。
このプロパティは、この設定に基づいてセッション内のすべてのタスクのリソース タイムアウト間隔を決定します。リソースのタイムアウト間隔は、リソース全体の転送を中止するまでの待機時間 (秒単位) を制御します。リソース タイマーはリクエストが開始されると開始され、リクエストが完了するか、このタイムアウト間隔に達するまでカウントされます。
デフォルト値は 7 日です。
利用可能性iOS (7.0 以降)、macOS (10.9 以降)、 tvOS (9.0 以降)、watchOS (2.0 以降)
@property NSTimeInterval timeoutInterval;
説明
受信者のタイムアウト間隔 (秒単位)。
接続試行中にリクエストがタイムアウト間隔よりも長くアイドル状態のままの場合、リクエストはタイムアウトしたとみなされます。デフォルトのタイムアウト間隔は 60 秒です。
原則として、短いタイムアウト間隔は使用しないでください。代わりに、ユーザーが長時間実行される操作を簡単にキャンセルできる方法を提供する必要があります。詳細については、「ネットワークの概要」の「リアルワールド ネットワークの設計」を参照してください。
利用可能性iOS (8.0 以降)、macOS (10.10 以降)、tvOS (9.0 以降)、watchOS (2.0 以降)
通常の場合、timeoutIntervalForRequest (文書によると、要求の要求の設定超過時間) と NSURLRequest timeoutInterval (個別の要求の設定超過時間) が設定されます
特殊事情况下(バックグラウンドセッションモード下上传、ダウンロード)設定timeoutIntervalForResource