gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:27:32 24 4
gpt4 key购买 nike

我使用 NSURLSessionTask 并且我正在尝试监控我的一些 HTTP 请求需要多长时间,当 NSURLSessionTask 实际上发出初始请求?如果这是 NSOperation 中的 NSURLConnection,我会在开始请求时启动一个计时器,但我无法控制任务何时开始。

最佳答案

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

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

计算时间间隔。

选项 01 [近似值]:

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com