首页 > 代码库 > 【swift】BlockOperation和GCD实用代码块
【swift】BlockOperation和GCD实用代码块
//BlockOperation//// ViewController.swift import UIKitclass ViewController: UIViewController { @IBOutlet weak var image1: UIImageView! @IBOutlet weak var image2: UIImageView! @IBOutlet weak var image3: UIImageView! @IBOutlet weak var image4: UIImageView! let imageUrls = [ "https://dn-boxueio.qbox.me/image1-big.jpg", "https://dn-boxueio.qbox.me/image2-big.jpg", "https://dn-boxueio.qbox.me/image3-big.jpg", "https://dn-boxueio.qbox.me/image4-big.jpg" ] override func viewDidLoad() { super.viewDidLoad() // present(<#T##viewControllerToPresent: UIViewController##UIViewController#>, animated: <#T##Bool#>, completion: nil) // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func clearDownload(_ sender: UIButton) { // self.image1.image=UIImage(named: <#T##String#>) self.image1.image = nil self.image2.image = nil self.image3.image = nil self.image4.image = nil URLCache.shared.removeAllCachedResponses() } let queue = OperationQueue() @IBAction func cancelDownload(_ sender: AnyObject) { self.queue.cancelAllOperations() } @IBAction func downloadImages(_ sender: UIButton) { // queue.addOperation({// // // let img1 = Downloader.downloadImageWithURL(self.imageUrls[0])// // OperationQueue.main.addOperation({// self.image1.image = img1// self.image1.clipsToBounds = true// })// })// // let op1 = BlockOperation(block: { let img1 = Downloader.downloadImageWithURL(self.imageUrls[0]) OperationQueue.main.addOperation({ self.image1.image = img1 self.image1.clipsToBounds = true }) }) op1.completionBlock = { print("image1 downloaded") } let op2 = BlockOperation(block: { let img2 = Downloader.downloadImageWithURL(self.imageUrls[1]) OperationQueue.main.addOperation({ self.image2.image = img2 self.image2.clipsToBounds = true }) }) op2.completionBlock = { print("image2 downloaded") } let op3 = BlockOperation(block: { let img3 = Downloader.downloadImageWithURL(self.imageUrls[2]) OperationQueue.main.addOperation({ self.image3.image = img3 self.image3.clipsToBounds = true }) }) op3.completionBlock = { print("image3 downloaded") } let op4 = BlockOperation(block: { let img4 = Downloader.downloadImageWithURL(self.imageUrls[3]) OperationQueue.main.addOperation({ self.image4.image = img4 self.image4.clipsToBounds = true }) }) op4.completionBlock = { print("image4 downloaded") } // op3.addDependency(op4) // op2.addDependency(op3) queue.addOperation (op1) queue.addOperation(op4) queue.addOperation(op3) queue.addOperation(op2) }}//GCD实用代码块import UIKitclass ViewController: UIViewController { @IBOutlet weak var image1: UIImageView! @IBOutlet weak var image2: UIImageView! @IBOutlet weak var image3: UIImageView! @IBOutlet weak var image4: UIImageView! let imageUrls = [ "https://dn-boxueio.qbox.me/image1-big.jpg", "https://dn-boxueio.qbox.me/image2-big.jpg", "https://dn-boxueio.qbox.me/image3-big.jpg", "https://dn-boxueio.qbox.me/image4-big.jpg" ] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func clearDownload(_ sender: UIButton) { self.image1.image = nil self.image2.image = nil self.image3.image = nil self.image4.image = nil URLCache.shared.removeAllCachedResponses() } func loadImageWithURL(_ url:String) -> UIImage! { let data = try? Data(contentsOf: URL(string: url)!) return UIImage(data: data!) } @IBAction func downloadImages(_ sender: UIButton) { var currQueue = DispatchQueue.global(qos: .default) // currQueue = DispatchQueue(label: "com.boxueio.images", attributes: .concurrent) //并行 currQueue=DispatchQueue(label: "currqueue1", qos: .default, attributes: .concurrent) // dispatch_async currQueue.async(execute: { let img1 = self.loadImageWithURL(self.imageUrls[0]) DispatchQueue.main.async(execute: { self.image1.image = img1 self.image1.clipsToBounds = true }) }) currQueue.async(execute: { let img2 = self.loadImageWithURL(self.imageUrls[1]) DispatchQueue.main.async(execute: { self.image2.image = img2 self.image2.clipsToBounds = true }) }) currQueue.async(execute: { let img3 = Downloader.downloadImageWithURL(self.imageUrls[2]) DispatchQueue.main.async(execute: { self.image3.image = img3 self.image3.clipsToBounds = true }) }) currQueue.async(execute: { let img4 = Downloader.downloadImageWithURL(self.imageUrls[3]) DispatchQueue.main.async(execute: { self.image4.image = img4 self.image4.clipsToBounds = true }) }) }}//class图片基类import UIKitclass Downloader { class func downloadImageWithURL(_ url:String) -> UIImage! { let data = try? Data(contentsOf: URL(string: url)!) return UIImage(data: data!) }}
【swift】BlockOperation和GCD实用代码块
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。