훌이
후리스콜링개발
훌이

블로그 메뉴

  • 왈 (iOS APP)
  • Github
전체 방문자
오늘
어제
  • 전체 (171)
    • ⭐️ 개발 (140)
      • JAVA (4)
      • Web (5)
      • iOS & Swift (94)
      • iOS Concurrency (4)
      • Rx (18)
      • Git (6)
      • WWDC (1)
      • Code Refactor (3)
      • Server (1)
    • ⭐️ Computer Science (22)
      • 운영체제 (10)
      • 네트워크 (5)
      • PS (7)
    • 경제시사상식 (8)
    • 기타 등등 (0)

인기 글

최근 글

05-31 14:31

티스토리

hELLO · Designed By 정상우.
훌이

후리스콜링개발

[iOS] 동기, 비동기 시작하기 앞서 그냥 오늘 배운 거...
⭐️ 개발/iOS & Swift

[iOS] 동기, 비동기 시작하기 앞서 그냥 오늘 배운 거...

2022. 8. 5. 12:46
728x90
반응형

어떤 용량이 대빵 큰 이미지를 다운 받는 실험을 해보자..

그러면 다운을 받아오기까지 그 외의 작업은 아예 못하는 것을 볼 수 있다. 토글 버튼을 움직이는 거나 등등 아무 것도 할 수 없다.

 

 

 

 

그러면 global 큐에 넣어서 비동기로 동시에 작업을 해줬을 경우에 어떤지 한 번 확인해보자!

사진을 받아오는 동안에 다른 작업이 가능하다! 

 

 

 

 

 

그러나 사진을 받아오는 도중에 코드 상에서 보라색으로 경고창이 하나 뜬다.

UIImageView.image must be used from main thread only

이미지는 메인스레드에서 사용되어야 한다.

 

 

그래서 이 말을 따라서 이미지뷰를 넣어주는 작업을 메인 스레드에서 처리해줬다.

그랬더니 오류가 생기지 않았다. 애플에서는 자체적으로 UI 작업은 메인스레드에서 처리를 하도록 하고 있다.

 

 

 

 

@IBAction func downloadButton(_ sender: Any) {
        let url = "https://apod.nasa.gov/apod/image/2208/M13_final2_sinfirma.jpg"
        print("1", Thread.isMainThread)
        
        DispatchQueue.global().async { // 동시에 여러 작업이 가능하게 해줘!
            print("2", Thread.isMainThread)
            let data = try! Data(contentsOf: URL(string: url)!)
            let image = UIImage(data: data)
            
            DispatchQueue.main.async {
                print("3", Thread.isMainThread)
                self.imageView.image = image
            }
        }
    }

 

 

1 true - Main Thread였다가

2 false - Main Thread가 아니였다가

3 true - UI작업처리는 Main Thread


동기 sync, 비동기 async, 직렬, 동시 

굉장히 헷갈리는 개념인데 찬찬히 아주 잠깐 훑고 지나가면

 

동기와 비동기는 동시에 작업을 처리하냐 마냐는 문제이다.

직렬과 동시는 동시에 작업을 처리하긴 할 건데 한 개의 스레드로 갈 건지, 여러개의 스레드로 분산시킬 건지 

 

https://huree-can-do-it.notion.site/1-GCD-Operation-3de2c4b4ca2c43cf9738eb0ca6a3eefe

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'⭐️ 개발 > iOS & Swift' 카테고리의 다른 글

[Swift] required init?(coder: NSCoder)  (0) 2022.08.10
[iOS] Swift Attribute 중 @IBInspectable과 @IBDesignable  (0) 2022.08.09
[Swift] 강순참이 존재하게 된 이유...  (0) 2022.08.05
[Swift] 일급 객체, Closure (1)  (0) 2022.08.03
[iOS] Alamofire, SwiftyJSON을 사용해서 HTTP 통신하기  (0) 2022.08.02
    '⭐️ 개발/iOS & Swift' 카테고리의 다른 글
    • [Swift] required init?(coder: NSCoder)
    • [iOS] Swift Attribute 중 @IBInspectable과 @IBDesignable
    • [Swift] 강순참이 존재하게 된 이유...
    • [Swift] 일급 객체, Closure (1)
    훌이
    훌이

    티스토리툴바