2017-04-26 52 views
1

只是想上的最佳實踐一些澄清,以使SWIFT網絡API調用2.斯威夫特 - 網絡請求和後臺排隊

這裏是我的典型的網絡請求的樣子下載JSON數據:

let session = NSURLSession(configuration: .defaultSessionConfiguration()) 
let url = NSURL(string: my_url_string) 
let request = NSURLRequest(URL: url) 

let dataTask = session.dataTaskWithRequest(request) { data, response, error in 
    do { 
     self.tableData = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! [NSDictionary] 
     dispatch_async(dispatch_get_main_queue(), {() -> Void in 
      self.tableView.reloadData() 
     }) 
    } catch let error { 
     print(error) 
    } 
} 
dataTask.resume() 

我的問題是:我應該把所有這個代碼塊包裝到背景隊列中嗎?我應該做如下:

let download_queue = dispatch_queue_create("download", nil) 
dispatch_async(download_queue) {() -> Void in 
    previous code here 
} 

或者我應該使用指定的高優先級隊列,如之一:

dispatch_async(dispatch_get_global_queue(QOS_CLASS_USER_INTERACTIVE, 0) 

而且,使得在隨後的視圖控制器額外的網絡請求的時候,我應該使用我在這裏使用相同的隊列還是應該創建一個新隊列?

回答

0

默認NSURLSession API是高度異步的。來自Apple的有用信息docs

有指示來包裝你的代碼塊與後臺線程GCD,也完成塊運行,因此是GCD的正確使用這麼多更新UITableview

+0

由於沒有明顯的問題!所以你說我不需要改變我的原始代碼?這是好的嗎? – JK140

+0

據我所知,沒有必要使用額外的GCD塊。但完全沒問題。 –