Пожалуйста, обратитесь к фрагменту кода ниже (некоторые части, не относящиеся к вопросу, опущены)
В WebService1 dataTask является переменной / свойством экземпляра, тогда как в WebService2 dataTask является локальной переменной внутри функции callWebService.
final class WebService1 {
let urlSession = URLSession(configuration: .default)
// 1. data task is a private property of PNWebService here
private var dataTask: URLSessionDataTask?
func callWebService(completion: () -> ()) {
var urlRequest = URLRequest(url: url)
dataTask = urlSession.dataTask(with: urlRequest) {
// task complete
completion()
}
dataTask?.resume()
}
}
final class WebService2 {
let urlSession = URLSession(configuration: .default)
func callWebService(completion: () -> ()) {
var urlRequest = URLRequest(url: url)
// 2. data task is a local variable here
var dataTask = urlSession.dataTask(with: url) {
// task complete
completion()
}
dataTask.resume()
}
}
Клиенты звонят в эти две службы обычным способом:
let ws1 = WebService1()
ws1.callWebService() {
print("1. complete")
}
let ws2 = WebService2()
ws2.callWebService() {
print("2. complete")
}
Q1) Кто владеет строгой ссылкой на dataTask в WebService2, чтобы он не был освобожден до вызова обработчика завершения?
Q2) С точки зрения клиента, в чем разница во время выполнения между WebService1 и WebService2?