面试题答案
一键面试- 响应时间监测:
- AFNetworking自带监测:
- AFNetworking的
AFURLSessionManager
和AFHTTPSessionManager
都基于NSURLSession
。可以通过NSURLSession
的代理方法来获取请求的时间信息。 - 例如,实现
NSURLSessionDataDelegate
协议中的- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler
方法,在这个方法中记录开始接收响应的时间点。 - 然后在
- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error
方法中,计算从开始接收响应到请求完成的时间差,这个时间差就是响应时间。
- AFNetworking的
- 使用AFNetworking的AFHTTPRequestOperation:
- 可以继承
AFHTTPRequestOperation
,重写- (void)start
和- (void)setCompletionBlockWithSuccess:(AFHTTPRequestOperationSuccessBlock)success failure:(AFHTTPRequestOperationFailureBlock)failure
方法。 - 在
start
方法中记录开始时间,在setCompletionBlockWithSuccess:failure:
的成功或失败回调中记录结束时间,计算两者差值得到响应时间。
- 可以继承
- AFNetworking自带监测:
- 数据传输量监测:
- 基于AFNetworking的请求和响应数据:
- 在请求时,可以通过获取请求体的数据长度来计算发出的数据量。例如,对于
AFHTTPRequestOperation
,如果是POST请求且有请求体,可以通过operation.request.HTTPBody.length
获取请求体长度。 - 在响应时,对于
AFHTTPRequestOperation
,可以通过operation.responseData.length
获取响应数据的长度。
- 在请求时,可以通过获取请求体的数据长度来计算发出的数据量。例如,对于
- 通过AFNetworking的AFURLSessionManager:
- 实现
NSURLSessionDataDelegate
协议的- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data
方法,在每次接收到数据时累加data
的长度,从而得到总的接收数据量。 - 对于发送的数据量,可以通过
NSURLSessionTask
的originalRequest
属性获取原始请求,进而获取请求体长度(如果有请求体)。
- 实现
- 基于AFNetworking的请求和响应数据: