標籤:nts main jpg queue類 指定 patch 線程 sof tun
多線程編程:下載資料時,開闢子線程,減少阻塞時間,和主線程並發運行,提升使用者體驗
1.Thread
1>建立Thread對象,帶一selector方法,調用start方法,開啟子線程
2>thread初始化內建的selector方法中請求資料
3>資料請回來後,調用self的performSelectorOnMainThread方法,又帶一selector,以及相應的參數,通常是請求回的資料,如果不是self,將找不到selector方法//必須是self
4>對請求回的資料進行處理,實現UI更新
2.GCD-great central dispatch
1>使用DispatchQueue類型建立隊列
2>dispatch_queue.async{
//請求資料代碼
//切回主線程
DispatchQueue.main.async{
//更新UI代碼
}
}
3.Operation
1>使用OperationQueue類型建立隊列
2>使用BlockOperation類型建立操作,操作中先請求資料,在調用self的performSelectorOnMainThread方法切回主線程,最後更新UI
code:
let operation = BlockOperation {
let url = URL(string:"http://pic37.nipic.com/20131227/17514635_163144299116_2.jpg")
let data = NSData(contentsOf: url!) as! Data
let img = UIImage(data: data)
//用指定方法更新UI,調用者必須為當前的viewController!!!
self.performSelector(onMainThread: #selector(self.updateImage(image:)), with: img, waitUntilDone: false)
}
queue.addOperation(operation)
3>將操作排入佇列
ios多線程開發基礎