MST

星途 面试题库

面试题:Objective-C中如何实现网络请求的基本性能监测

在Objective-C开发中,使用AFNetworking进行网络请求,简述如何实现对请求的响应时间、数据传输量等基本性能指标的监测。
46.8万 热度难度
编程语言Objective-C

知识考点

AI 面试

面试题答案

一键面试
  1. 响应时间监测
    • AFNetworking自带监测
      • AFNetworking的AFURLSessionManagerAFHTTPSessionManager都基于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的AFHTTPRequestOperation
      • 可以继承AFHTTPRequestOperation,重写- (void)start- (void)setCompletionBlockWithSuccess:(AFHTTPRequestOperationSuccessBlock)success failure:(AFHTTPRequestOperationFailureBlock)failure方法。
      • start方法中记录开始时间,在setCompletionBlockWithSuccess:failure:的成功或失败回调中记录结束时间,计算两者差值得到响应时间。
  2. 数据传输量监测
    • 基于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的长度,从而得到总的接收数据量。
      • 对于发送的数据量,可以通过NSURLSessionTaskoriginalRequest属性获取原始请求,进而获取请求体长度(如果有请求体)。