菜鸟教程小白 发表于 2022-12-13 14:30:58

ios - URLSession 最佳实践 - 多个请求


                                            <p><p>我需要一些关于 <code>URLSession/NSURLSession</code> 最佳实践的指导。</p>

<p>我的要求规定我必须执行临时/定期 HTTP GET 请求。即每隔几分钟,然后可能每 30 秒,随意更改。</p>

<p>无论如何我已经实现了如下,我有一个包含这样代码的方法:</p>

<pre><code> 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 ...
</code></pre>

<p>这使 URLSession 保持在此方法的范围内。</p>

<p>所以有些问题:</p>

<p>1) 这是 <em>正确</em> 实现我正在寻找的方法还是我应该在类级别范围内拥有一个 URLSession 并创建多个“任务”? - 如果是这样,我应该在每个任务上调用 .resume 吗?</p>

<p>2) 如果这是一个可接受的 URLSession 使用范例,我是否会泄漏内存(ARC 不这么认为)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用它/替换它的方法的范围之外。 (我通过对我定期检查的对象的 WEAK 引用进行检查)...</p>

<p>3) 有没有一种更简洁的方法来使用 URLSession 临时获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p><strong>1) 这是实现我正在寻找的东西的正确方法,还是我应该在类级别范围内拥有一个 URLSession 并创建多个“任务”? - 如果是这样,我应该在每个任务上调用 .resume 吗?</strong></p>

<p>回答:
你正在做的事情并没有错,尽管它并不常见。
最佳实践是使用 URLSession 的共享实例。为您发出的每个请求(通常每 30 秒)创建一个新的 session 配置和 URLSession 对象,其性能将低于使用单例。 </p>

<p><strong>2) 如果这是一个可接受的 URLSession 使用范例,我是否会泄漏内存(ARC 不这么认为)?我问,因为我注意到 URLSession 对象似乎停留在我每次调用它/替换它的方法的范围之外。 (我通过对我定期检查的对象的 WEAK 引用进行检查)...</strong></p>

<p>回答:
您可能会注意到您的 URLSession 对象超出了您的方法调用范围的原因是您正在向它传递一个转义闭包,并且 session 可能会一直存在,直到调用完成处理程序。 </p>

<p><strong>3) 有没有一种更简洁的方法来使用 URLSession 以临时方式获取相同的 URL 请求?我觉得 NSURLConnection 处理得很好,但它已被弃用。</strong></p>

<p>回答:有很多方法可以做到这一点。您可以尝试存储对 URL 或请求的引用,并使用您希望的相同请求调用您的方法。 </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - URLSession 最佳实践 - 多个请求,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/41600446/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/41600446/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - URLSession 最佳实践 - 多个请求