NSURL需要很长时间才能返回URL的内容。有没有办法加快速度?

时间:2015-10-29 20:33:50

标签: ios swift nsurl


我正在使用NSURL将MySQL查询提交到Web服务器以存储我的应用程序的数据。问题是,即使简单的5个字回复,请求大约需要15秒。我尽可能简化了我的代码,但我认为它根本没有加速。
代码:

import UIKit
import Foundation

class ViewController: UIViewController {

    @IBOutlet weak var testLabel: UILabel!

    @IBAction func testButton(sender: UIButton) {
        let myUrl = NSURL(string: "http://www.casacorazon.org/ios.html")
        let request = NSMutableURLRequest(URL: myUrl!)
        request.HTTPMethod = "POST"
        let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
            data, response, error in
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            self.testLabel.text = "\(responseString!)"
            if error != nil {
                print("Error: \(error)")
            }
        }
        task.resume()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

}

如果您知道一种方法可以使代码运行得更快,或者缩短15秒,我很乐意知道。

谢谢,
尼克

2 个答案:

答案 0 :(得分:3)

你是网络。你不是在改变网络。这就是生活的方式。你不应该关心它需要多长时间。只要网络通信完成,您的回调方法就会异步回调。从现在开始可能是十分钟(好吧,也许不是,因为之前可能会有超时)。你的工作是以不确定的时间流逝为止进行编码。

答案 1 :(得分:2)

在优先级排队的队列中运行回调可能会有所帮助。尝试这一点,如果你评论它是否有所作为,那将是很好的,如果不是,我会删除答案,让自己避免更多的尴尬:)

@IBAction func testButton(sender: UIButton) {
    let myUrl = NSURL(string: "http://www.casacorazon.org/ios.html")
    let request = NSMutableURLRequest(URL: myUrl!)
    request.HTTPMethod = "POST"
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0)) {
            let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
            if error != nil {
                 print("Error: \(error)")
            } 
            dispatch_async(dispatch_get_main_queue()) {
                self.testLabel.text = "\(responseString!)"
            }
        }
    }
    task.resume()
}