iOS10以上支持
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics API_AVAILABLE(macosx(10.12), ios(10.0), watchos(3.0), tvos(10.0));
@interface NSURLSessionTaskMetrics : NSObject
/*
* 数组包含为任务执行期间创建的每个请求/响应事务收集的对应数据。
*/
@property (copy, readonly) NSArray<NSURLSessionTaskTransactionMetrics *> *transactionMetrics;
/*
* 从任务创建时间到任务完成时间的间隔。
* 任务创建时间是实例化任务的时间。
* 任务完成时间是指任务即将将其内部状态更改为已完成的时间。
*/
@property (copy, readonly) NSDateInterval *taskInterval;
/*
* 重定向次数. 状态码302,设置Location=重定向地址
*/
@property (assign, readonly) NSUInteger redirectCount;
@end
12438546-5ebced7d9f8ef673.jpg
参数代表含义
//表示事务请求。
@property (copy, readonly) NSURLRequest *request;
//如果发生错误而没有生成响应,则此属性为nil。
//表示事务响应。如果发生错误且没有生成响应,则可以为nil。
@property (nullable, copy, readonly) NSURLResponse *response;
//任务开始从服务器或本地获取资源的时间。
@property (nullable, copy, readonly) NSDate *fetchStartDate;
//任务开始查找资源名称之前的时间。
//如果使用持久连接,或者从本地资源检索资源,则此值为nil。
@property (nullable, copy, readonly) NSDate *domainLookupStartDate;
//名称查找完成后的时间。
//如果使用持久连接,或者从本地资源检索资源,则此值为nil。
@property (nullable, copy, readonly) NSDate *domainLookupEndDate;
/*任务开始建立到服务器的TCP连接之前的时间。
如果使用持久连接,或者从本地资源检索资源,则此值为nil。
connectStartDate是用户代理开始建立到服务器的连接之前的时间。
例如,这将对应于用户代理开始尝试建立TCP连接之前的时间。*/
@property (nullable, copy, readonly) NSDate *connectStartDate;
/*任务启动TLS安全握手以保护当前连接之前的时间。
如果未使用加密连接、使用持久连接或从本地资源检索资源,则此值为nil。
如果使用加密连接,secureConnectionStartDate是用户代理启动安全握手以保护当前连接之前的时间。
例如,这将对应于用户代理开始TLS握手之前的时间。
如果未使用加密连接,则将此属性设置为nil。*/
@property (nullable, copy, readonly) NSDate *secureConnectionStartDate;
/*安全握手完成后立即发生的时间。
如果未使用加密连接、使用持久连接或从本地资源检索资源,则此值为nil。
如果使用加密连接,secureConnectionEndDate是安全握手完成后的立即时间。
如果未使用加密连接,则将此属性设置为nil。
*/
@property (nullable, copy, readonly) NSDate *secureConnectionEndDate;
/*任务完成后立即建立到服务器的连接的时间。
此值用于完成与安全性相关的握手和其他握手。如果使用持久连接,或者从本地资源检索资源,则该值为nil。
connectEndDate是用户代理完成与服务器的连接后的立即时间,包括完成与安全性相关的握手和其他握手。
*/
@property (nullable, copy, readonly) NSDate *connectEndDate;
/*任务开始请求资源之前的时间,无论从服务器还是本地资源检索资源。
例如,这将对应于用户代理发送HTTP GET请求之前的时间。
*/
@property (nullable, copy, readonly) NSDate *requestStartDate;
/*任务完成后立即请求资源的时间,无论它是从服务器或本地资源检索到的。
requestEndDate是用户代理完成对源的请求后立即出现的时间,不管是从服务器检索到的资源还是本地资源。
例如,这将对应于用户代理完成发送请求的最后一个字节后的立即时间。
*/
@property (nullable, copy, readonly) NSDate *requestEndDate;
/*任务从服务器或本地资源接收到响应的第一个字节后的立即时间。
例如,这将对应于用户代理收到HTTP响应的第一个字节后的立即时间。
*/
@property (nullable, copy, readonly) NSDate *responseStartDate;
/*任务接收到资源的最后一个字节后的立即时间。
responseEndDate是用户代理收到资源的最后一个字节后的立即时间。
*/
@property (nullable, copy, readonly) NSDate *responseEndDate;
/*用于获取资源的网络协议。
当配置代理并建立隧道连接时,该属性返回隧道协议的值,该值由ALPN协议ID标识序列标识,如RFC 7310所示。例如:
如果没有使用代理,并且协商了HTTP/2,则返回h2。
如果代理使用HTTP/1.1,并且隧道连接是HTTP/2,则返回h2。
如果代理使用HTTP/1.1,并且没有通道,则返回HTTP/1.1。
*/
@property (nullable, copy, readonly) NSString *networkProtocolName;
/*一个布尔值,指示是否使用代理连接来获取资源。
如果使用代理连接获取资源,则将此属性设置为YES。
*/
@property (assign, readonly, getter=isProxyConnection) BOOL proxyConnection;
/*一个布尔值,指示是否使用持久连接来获取资源。
如果使用持久连接获取资源,则将此属性设置为YES。
*/
@property (assign, readonly, getter=isReusedConnection) BOOL reusedConnection;
/*一个值,指示是否从本地缓存加载、推送或检索资源。
指示是否从本地缓存加载、推送或检索资源。
*/
@property (assign, readonly) NSURLSessionTaskMetricsResourceFetchType resourceFetchType;
ios13支持字段 本地ip端口 远程ip端口
/*
* localAddress is the IP address string of the local interface for the connection.
*
* For multipath protocols, this is the local address of the initial flow.
*
* If a connection was not used, this attribute is set to nil.
*/
@property (nullable, copy, readonly) NSString *localAddress API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
/*
* localPort is the port number of the local interface for the connection.
*
* For multipath protocols, this is the local port of the initial flow.
*
* If a connection was not used, this attribute is set to nil.
*/
@property (nullable, copy, readonly) NSNumber *localPort API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
/*
* remoteAddress is the IP address string of the remote interface for the connection.
*
* For multipath protocols, this is the remote address of the initial flow.
*
* If a connection was not used, this attribute is set to nil.
*/
@property (nullable, copy, readonly) NSString *remoteAddress API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
/*
* remotePort is the port number of the remote interface for the connection.
*
* For multipath protocols, this is the remote port of the initial flow.
*
* If a connection was not used, this attribute is set to nil.
*/
@property (nullable, copy, readonly) NSNumber *remotePort API_AVAILABLE(macos(10.15), ios(13.0), watchos(6.0), tvos(13.0));
网友评论