我使用NSURLSessionTask,并且我试图监视我的一些HTTP请求需要多长时间,我可以监视什么委托方法(或者其他什么)来监视NSURLSessionTask何时实际发出初始请求?如果这是一个NSURLConnection在一个NSOperation,我会启动计时器时,我启动请求,但我没有控制什么时候开始任务。
发布于 2014-10-01 16:33:20
请检查NSURLSessionTaskDelegate.它有以下委托回调:
URLSession:task:didCompleteWithError:
URLSession:task:didReceiveChallenge:completionHandler:
URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
URLSession:task:needNewBodyStream:
URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:计算时间间隔。
选项01近似
您应该在调用恢复方法之后启动一个计时器,并计算何时调用委托回调didCompleteWithError。
self.dataTask = [self.session dataTaskWithRequest:theRequest];
[self.dataTask resume];
NSTimeInterval totalCountdownInterval;
NSDate* startDate = [NSDate date];
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkCountdown:) userInfo:nil repeats:YES];选项02 (如果需要准确性),
NSURLSessionTask的属性都与KVO兼容。
[self.dataTask addObserver:self forKeyPath:@"someKeyPath" options:NSKeyValueObservingOptionOld context:nil];
[self.dataTask resume];
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{
// do some calculation after checking state
/*
NSURLSessionTaskStateRunning = 0,
NSURLSessionTaskStateSuspended = 1,
NSURLSessionTaskStateCanceling = 2,
NSURLSessionTaskStateCompleted = 3, */
}发布于 2017-12-04 17:07:27
我知道这是一个老问题,但是对于搜索委托方法func urlSession(_ session: URLSession,task: URLSessionTask,didFinishCollecting method : URLSessionTaskMetrics)的人来说,URLSessionTaskDelegate应该能够提供大量关于请求的信息,包括它花了多长时间。
发布于 2014-10-01 18:13:31
有两种选择:
NSURLSession呈现,然后捕获didReceiveResponse和didCompleteWithError之间的运行时间。诚然,这并不能捕获接收响应所涉及的延迟,但是如果您正在寻找一种简单的度量方法,它可以将等待可用连接的时间考虑在内,这是一种方法。NSURLSessionTask对象封装在一个NSOperation子类中,就像您对NSURLConnection所做的那样。在使用NSURLSessionTask工厂方法的完成块呈现的情况下,这是非常简单的。在使用基于委托的方法时,它要麻烦一些(因为,令人恼火的是,NSURLSession不允许我们为各个任务指定委托对象(尽管它们允许我们为它们关联完成块),而是在会话对象级别调用所有特定于任务的委托方法)。
无论如何,当您将它包装在一个NSOperation子类中时,您可以很容易地捕获整个经过的时间。https://stackoverflow.com/questions/26145915
复制相似问题