ABOUT ME

안뇽?

Today
Yesterday
Total
  • (iOS) OperationQueue를 활용하여 비동기 프로그래밍 해보기
    Programing Language/iOS(Swift) 2019. 10. 28. 15:46
    728x90
    반응형

     

    비동기 작업을 할때는 OperationQueue를 호출하여 그 안에 실행할 코드를 친다.

    //
    //  ViewController.swift
    //  AsyncExample
    //
    //  Created by Ik ju Song on 2019/10/28.
    //  Copyright © 2019 Ik ju Song. All rights reserved.
    //
    
    import UIKit
    
    class ViewController: UIViewController {
    
        @IBOutlet weak var image_view: UIImageView!
        
        
        
        
        
        
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
        }
    
    
        @IBAction func downloadBtn(_ sender: Any) {
            //https://image.shutterstock.com/image-photo/mountains-during-sunset-beautiful-natural-600w-407021107.jpg
            let image_url : URL = URL(string : "https://image.shutterstock.com/image-photo/mountains-during-sunset-beautiful-natural-600w-407021107.jpg")!
            /*
            Data.init 함수를 사용할때 어떠한 설정을 하지 않으면 메인스레드로만 작동이되서 화면이 멈춘다.
            
            let image_data : Data = try! Data.init(contentsOf: image_url)
            let image : UIImage = UIImage(data : image_data)!
            
            self.image_view.image = image
            */
            
            // 백그라운드 스레드에서 Data 함수 사용하기.
            OperationQueue().addOperation {
                let image_data : Data = try! Data.init(contentsOf: image_url)
                let image : UIImage = UIImage(data : image_data)!
                
                // Data 함수는 백그라운드 스레드에서 사용되지만
                // image같은 ui의 변화를 나타내게하는 코드는 main Thread에서 작업되어져야한다. 그래서 OperationQueue 에 main.addOpertion메서드를 사용해서 self.image_view.image = image 코드를 적용시킨다.
                
                OperationQueue.main.addOperation {
                    self.image_view.image = image
                }
                
            }
            
            
        }
    }
    
    

     

    728x90
    반응형
Designed by Tistory.