URLSession 最佳实践——多次请求
URLSession best practice - multiple requests
我需要一些有关 URLSession/NSURLSession
最佳实践的指导。
我的要求规定我必须执行 adhoc/periodic HTTP GET 请求。即每隔几分钟,然后可能每 30 秒,随意更改。
无论如何我已经实现了如下,我有一个包含如下代码的方法:
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in ...
这使得 URLSession 在此方法的范围内。
所以一些问题:
1) 这是 正确的 方法来实现我正在寻找的东西,还是我应该在 Class 级别范围内进行 URLSession 和创建多个 'tasks'? - 如果是这样,我应该在每个任务上调用 .resume 吗?
2) 如果这是 URLSession 可接受的使用范例,我是否在泄漏内存(ARC 不会这样想)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用 it/replace 的方法范围之外。 (我通过对我定期检查的对象的 WEAK 引用来检查它)...
3) 是否有更简洁的方法来使用 URLSession 临时获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。
1) 这是实现我正在寻找的东西的正确方法还是我应该在 Class 级别范围内有一个 URLSession 并创建多个 'tasks'? - 如果是这样,我应该在每个任务上调用 .resume 吗?
回答:
你所做的并没有错,尽管这并不常见。
最佳做法是使用 URLSession 的共享实例。为您发出的每个请求创建一个新的会话配置和 URLSession 对象(通常每 30 秒一次),性能会低于使用单例。
2) 如果这是 URLSession 可接受的使用范例,我是否在泄漏内存(ARC 不会这样想)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用 it/replace 的方法范围之外。 (我通过对我定期检查的对象的 WEAK 引用来检查它)...
回答:
您可能会注意到您的 URLSession 对象超出方法调用范围的原因是您正在向它传递一个转义闭包,并且会话可能会一直存在,直到调用完成处理程序。
3) 是否有更简洁的方法来使用 URLSession 临时获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。
回答:有很多方法可以做到这一点。您可以尝试存储对 URL 或请求的引用,并根据需要使用相同的请求调用您的方法。
我需要一些有关 URLSession/NSURLSession
最佳实践的指导。
我的要求规定我必须执行 adhoc/periodic HTTP GET 请求。即每隔几分钟,然后可能每 30 秒,随意更改。
无论如何我已经实现了如下,我有一个包含如下代码的方法:
let urlRequest = URLRequest(url: url)
// set up the session
let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)
// make the request
let task = session.dataTask(with: urlRequest, completionHandler: { (data, response, error) in ...
这使得 URLSession 在此方法的范围内。
所以一些问题:
1) 这是 正确的 方法来实现我正在寻找的东西,还是我应该在 Class 级别范围内进行 URLSession 和创建多个 'tasks'? - 如果是这样,我应该在每个任务上调用 .resume 吗?
2) 如果这是 URLSession 可接受的使用范例,我是否在泄漏内存(ARC 不会这样想)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用 it/replace 的方法范围之外。 (我通过对我定期检查的对象的 WEAK 引用来检查它)...
3) 是否有更简洁的方法来使用 URLSession 临时获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。
1) 这是实现我正在寻找的东西的正确方法还是我应该在 Class 级别范围内有一个 URLSession 并创建多个 'tasks'? - 如果是这样,我应该在每个任务上调用 .resume 吗?
回答: 你所做的并没有错,尽管这并不常见。 最佳做法是使用 URLSession 的共享实例。为您发出的每个请求创建一个新的会话配置和 URLSession 对象(通常每 30 秒一次),性能会低于使用单例。
2) 如果这是 URLSession 可接受的使用范例,我是否在泄漏内存(ARC 不会这样想)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用 it/replace 的方法范围之外。 (我通过对我定期检查的对象的 WEAK 引用来检查它)...
回答: 您可能会注意到您的 URLSession 对象超出方法调用范围的原因是您正在向它传递一个转义闭包,并且会话可能会一直存在,直到调用完成处理程序。
3) 是否有更简洁的方法来使用 URLSession 临时获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。
回答:有很多方法可以做到这一点。您可以尝试存储对 URL 或请求的引用,并根据需要使用相同的请求调用您的方法。