(资料图)
在平时开发中有时候需要收集网络不同阶段性能数据来分析网络情况,下面总结了2种收集方式。1.通过NSURLSession提供的代理方法收集2.通过NSURLProtocol做统一网络请求拦截收集通过NSURLSession提供的代理方法收集当NSURLSessionTask完成并返回响应时,NSURLSession会收集一些关于任务运行的性能指标,如请求时间、响应时间、传输速度、重定向次数等等。这些指标会被包装成NSURLSessionTaskMetrics对象,并在任务完成时传递给代理对象。在这个方法中可以对这些指标进行处理和记录,以便对网络性能进行分析和优化。@interface MySessionDelegate : NSObject通过NSURLProtocol做统一网络请求拦截收集NSURLProtocol是自定义URL加载系统的一部分,允许开发者拦截URL请求并做自定义的逻辑处理。NSURLProtocol的主要作用是在URL请求和URL响应之间添加拦截器,提供了对URL请求的拦截和处理的能力。NSURLProtocol常用方法说明canInitWithRequest::用于判断是否需要处理该请求,如果返回YES,则会继续调用其他方法处理该请求,如果返回NO,则会终止处理该请求。canonicalRequestForRequest::用于获取规范化的请求对象,可以在这里修改请求头等信息。startLoading::用于开始处理请求,可以在这里发起网络请求、读取本地缓存等操作。stopLoading::用于停止处理请求,通常在此方法中取消网络请求、关闭文件等操作。NSURLProtocol的使用非常灵活,可以用于实现自定义的网络拦截器、缓存策略、调试工具等。代码举例@end@implementation MySessionDelegate- (void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didFinishCollectingMetrics:(NSURLSessionTaskMetrics *)metrics { // 打印出请求的各项指标 for(NSURLSessionTaskTransactionMetrics *transaction in metrics.transactionMetrics) { NSHTTPURLResponse *response = (NSHTTPURLResponse *)transaction.response; NSLog(@"Request URL: %@", transaction.request.URL); NSLog(@"HTTP Status Code: %ld", (long)response.statusCode); NSLog(@"Request Start Time: %@", transaction.startDate); NSLog(@"Request End Time: %@", transaction.endDate); NSLog(@"Request Duration: %f", [transaction.duration doubleValue]); NSLog(@"Bytes Sent: %lld", transaction.countOfRequestBodyBytesSent); NSLog(@"Bytes Received: %lld", transaction.countOfResponseBodyBytesReceived); NSLog(@"Redirection Count: %lu", (unsigned long)transaction.redirectCount); NSLog(@"Request Method: %@", transaction.request.HTTPMethod); }}@end
@interface MyURLProtocol : NSURLProtocol@end@interface MyURLProtocol()@property(nonatomic, strong) NSURLConnection *connection;@property(atomic, strong) NSMutableData *receivedData;@end@implementation MyURLProtocol+ (BOOL)canInitWithRequest:(NSURLRequest *)request { if ([NSURLProtocol propertyForKey:kCustomURLProtocolKey inRequest:request]) { return NO; } #if defined(Debug) return YES;#elif defined(Release) return NO;#endif}+ (NSURLRequest *)canonicalRequestForRequest:(NSURLRequest *)request { return request;}- (void)startLoading { NSMutableURLRequest *mutableRequest = [[self request] mutableCopy]; [NSURLProtocol setProperty:@YES forKey:kCustomURLProtocolKey inRequest:mutableRequest]; self.connection = [NSURLConnection connectionWithRequest:mutableRequest delegate:self];}- (void)stopLoading { [self.connection cancel]; self.connection = nil;}#pragma mark - NSURLConnection Delegate#pragma mark - NSURLConnection Delegate- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{ [[self client] URLProtocol:self didReceiveResponse:response cacheStoragePolicy:NSURLCacheStorageNotAllowed];}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{ [[self client] URLProtocol:self didLoadData:data]; if (self.receivedData == nil) { self.receivedData = [[NSMutableData alloc] init]; } [self.receivedData appendData:data];}-(void)connectionDidFinishLoading:(NSURLConnection *)connection{ NSURLRequest *logRequest = [self.request copy]; NSData *data = [self.receivedData copy]; [[self client] URLProtocolDidFinishLoading:self]; self.connection = nil;#if defined(Debug) dispatch_async(dispatch_get_main_queue(), ^{ [[LogManager sharedInstance] addNetworkLog:logRequest response:data]; });#else dispatch_async(dispatch_get_main_queue(), ^{ [[LogManager sharedInstance] addNetworkLog:logRequest response:data]; });#endif }- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error{ [[self client] URLProtocol:self didFailWithError:error]; self.connection = nil;}@end
关键词:
最新:iOS网络数据指标收集
全球视点!荣耀90上架 全系5000mAh高能量大电池
新闻分析:日本原子能监管机构为何示警福岛核电站新风险-今日关注
【环球播资讯】外媒:北约士兵控制科索沃一座市政大楼
江苏三地官宣入夏,已有9座城市开启夏日时光
银川高校毕业生档案去向_信息
比荷是q比m还是m比q(比荷)
好听霸气的帮派名字_游戏霸气帮派名字都有哪些_全球热闻
环球微头条丨千牛怎么改店铺类别(千牛怎么改店铺名字)
广州医保个人账户划入最新标准,2023年广州医保每个月能打入多少钱?
世界球精选!华为天才少年离职创业,加入AI赛道,获李彦宏、陆奇投资
论文开题答辩ppt怎么写(开题答辩ppt研究框架是什么)
新消息丨众名嘴热议热火胜绿军,徐静雨彻底破防,杨毅盛赞巴特勒比科比硬
军团要塞1经典_军团要塞1
直降+免息 华硕主板618开门红放大招-世界今热点
2023年第一季度全国旅行社统计调查报告-全球关注
今亮点!安徽省煤田地质局第二勘探队怎么样(安徽省煤田地质局第二勘探队)
国足对马来西亚(中国国足对马来西亚比赛结果) 每日资讯
他们,生来顽强
素水饺可以有哪些花样?
美媒:太平洋地区“友好国家”质疑美国新倡议
全球消息!定量社会学
“萌禽”趴在路边 黄骅民警救助 观焦点
5月30日南通润丰糠醛报价基本平稳
今日聚焦!比豪华更越野,比越野更豪华 福特探险者昆仑巅峰版上市
100打一成语是什么_1 100打一成语 世界聚焦
封面报道丨今天给孩子们读什么|全球独家
对话隆基绿能创始人:在找到光伏终极路线前 将谨慎布局产能_世界视讯
每日视讯:不支付赡养费会怎么样
中国东航开通宁波首条直达布达佩斯洲际往返航线