@property NSTimeInterval timeoutIntervalForRequest; Description The timeout interval to use when waiting for additional data. This property determines the request timeout interval for data。 seconds) a task should wait for additional data to arrive before giving up. The timer associated with this value is reset whenever new data arrives. When the request timer reaches the specified interval without ifiedeiving any new . . Important Any upload or download tasks created by a background session are automatically retried if the original request fails due to a timeout. To configure how long an upload or download task should be allowed to be retried or transferred, use the timeoutIntervalForResource property. AvailabilityiOS (7.0 and later), macOS (10.9 and later), tvOS (9.0 and later), watchOS (2.0 and later)
下面的這段文字:參考這裡
timeoutIntervalForRequest 和 timeoutIntervalForResource指定了請求以及該資源的逾時時間間隔。許多開發人員試圖使用timeoutInterval去限制發送請求的總時間,但這誤會了timeoutInterval的意思:封包之間的時間。 timeoutIntervalForResource實際上提供了整體超時的特性,這應該只用於後台傳輸,而不是用戶實際上可能想要等待的任何東西。
自己測試理解
在一定的情況下(timeoutInterval,timeoutIntervalForResource,timeoutIntervalForRequest)這三個值均可以觸發請求逾時。
分兩種情況來理解,即有沒有為NSURLReaqust設定timeoutInterval。
1.如果設定了NSURLRequest timeoutInterval:
忽略timeoutIntervalForRequest設置,以timeoutIntervalForResource、timeoutInterval較小的值為逾時時間。
2.沒有設定NSURLRequest timeoutInterval:
以timeoutIntervalForRequest、timeoutIntervalForResource較小的值為逾時時間,並不是Request timeoutInterval的預設60s。
NSURLRequest和SessionConfiguration都不設定使用預設值60s逾時。
background session模式下上傳下載忽略掉timeoutIntervalForRequest和timeoutInterval的設定
使用timeoutIntervalForResource
NSURLRequest
timeoutInterval-(預設60s)
SessionConfiguration
timeoutIntervalForRequest- (預設60s)
timeoutIntervalForResource- (預設7天)
@property NSTimeInterval timeoutIntervalForRequest;
Description
The timeout interval to use when waiting for additional data.
This property determines the request timeout interval for data。 seconds) a task should wait for additional data to arrive before giving up. The timer associated with this value is reset whenever new data arrives. When the request timer reaches the specified interval without ifiedeiving any new . .
Important
Any upload or download tasks created by a background session are automatically retried if the original request fails due to a timeout. To configure how long an upload or download task should be allowed to be retried or transferred, use the timeoutIntervalForResource property.
AvailabilityiOS (7.0 and later), macOS (10.9 and later), tvOS (9.0 and later), watchOS (2.0 and later)
@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