【问题标题】:NSUrlSession Running Slow in SwiftNSUrlSession 在 Swift 中运行缓慢
【发布时间】:2015-10-22 20:45:15
【问题描述】:

我正在迅速将数据下载到我的 iOS 应用程序中。它工作得很好,尽管最终发生的事情是即使我处于快速连接状态,它也可能需要 20 秒才能加载。我不明白为什么会这样。我几乎想在应用程序打开之前下载所有数据,尽管我不想这样做,因为我知道可以加快速度,我知道这是可能的,因为 YouTube 和 Facebook 等应用程序可以在不到20 秒。哎呀,YouTube 加载视频的时间少于那段时间。我知道我的服务器没有那么快,但我碰巧知道我的服务器比那快。我确实想提醒您,该页面最终加载速度并不快。请帮忙。这是 NSUrlSession 代码。

func contactApiUrl(){
        let url = "http://www.example.com"

        let nsUrl = NSURL(string:url)
        let nsUrlRequest = NSURLRequest(URL: nsUrl!)
        let task = NSURLSession.sharedSession().dataTaskWithRequest(nsUrlRequest){
            (data, response, error) in
            if let dat = data{
                let contents = NSString(data:dat, encoding:NSUTF8StringEncoding) as! String
       self.aboutText.text = contents
            }

        }
        task.resume()
    }

我要提前感谢任何可以帮助我的人。

【问题讨论】:

  • 它运行不慢。所有 UI 更新都应在主队列中完成。只需添加 dispatch_async
  • 我不明白你的意思。你能解释一下主队列是什么以及我如何添加 dispatch_async 吗?
  • 我已经发布了答案

标签: ios swift nsurlsession dispatch-async swift2.1


【解决方案1】:
func contactApiUrl(){
    guard
        let nsUrl = NSURL(string: "http://www.example.com")
    else { return }
    NSURLSession.sharedSession().dataTaskWithRequest(NSURLRequest(URL: nsUrl)){
        (data, response, error) in
        guard
            let data = data,
            let contents = String(data: data, encoding: NSUTF8StringEncoding)
        else { return }
        // All UI updates should be done at the main queue.
        dispatch_async(dispatch_get_main_queue(), { () -> Void in
            self.aboutText.text = contents
        })
    }.resume()
}

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2021-11-25
    • 2020-07-22
    • 1970-01-01
    相关资源
    最近更新 更多