我使用NSURLSessionTask,试图监视我的一些HTTP请求花费的时间,何时NSURLSessionTask实际发出初始请求时可以监视什么委托方法(或其他方法)?如果这是NSURLConnection内的NSOperation,则在我启动请求时会启动一个计时器,但是我无法控制任务何时启动。

最佳答案

请检查 NSURLSessionTaskDelegate 。它具有以下委托回调:

URLSession:task:didCompleteWithError:
URLSession:task:didReceiveChallenge:completionHandler:
URLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:
URLSession:task:needNewBodyStream:
URLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:

计算时间间隔。

选项01 [大约]:

您应该在调用resume方法之后立即启动计时器,并计算何时调用委托回调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, */
}

关于ios - 如何确定NSURLSessionTask的请求何时开始?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26145915/

10-08 20:53