如何确定NSURLSessionTask的请求何时开始?

Shi*_*zam 5 objective-c ios nsurlsession nsurlsessiontask

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

bll*_*akk 4

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

\n\n
URLSession:task:didCompleteWithError:\nURLSession:task:didReceiveChallenge:completionHandler:\nURLSession:task:didSendBodyData:totalBytesSent:totalBytesExpectedToSend:\nURLSession:task:needNewBodyStream:\nURLSession:task:willPerformHTTPRedirection:newRequest:completionHandler:\n
Run Code Online (Sandbox Code Playgroud)\n\n

来计算时间间隔。

\n\n

选项 01 [大约]:

\n\n

您应该在调用resume方法后立即启动一个计时器,并计算何时调用委托回调didCompleteWithError。

\n\n
self.dataTask = [self.session dataTaskWithRequest:theRequest];\n[self.dataTask resume];\n\nNSTimeInterval totalCountdownInterval;\nNSDate* startDate = [NSDate date];\nNSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(checkCountdown:) userInfo:nil repeats:YES];\n
Run Code Online (Sandbox Code Playgroud)\n\n

选项 02 [如果需要精度]:

\n\n

NSURLSessionTask\xe2\x80\x99s 属性均符合 KVO 标准。

\n\n
[self.dataTask addObserver:self forKeyPath:@"someKeyPath" options:NSKeyValueObservingOptionOld context:nil];\n[self.dataTask resume];\n\n- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context{\n  // do some calculation after checking state\n\n   /* \nNSURLSessionTaskStateRunning = 0,                     \n    NSURLSessionTaskStateSuspended = 1,\n    NSURLSessionTaskStateCanceling = 2,                   \n    NSURLSessionTaskStateCompleted = 3, */\n}\n
Run Code Online (Sandbox Code Playgroud)\n

  • 这些都是确定何时完成/重定向等的好方法,但它们都没有表明请求最初是何时发出的。 (2认同)