DevCho
Developer Blog
DevCho
반응형
전체 방문자
오늘
어제
  • 분류 전체보기 (48)
    • IOS (31)
      • Xcode (7)
      • Assets (1)
      • Swift (20)
      • UI (1)
      • SwiftUI (1)
      • Build (1)
    • Flutter (4)
      • Install (4)
      • Dart (0)
    • Rust (0)
    • 유용한 사이트 소개 (1)
    • 개발자의 아이템 (1)
    • Terminal (1)
    • Mac (2)
    • Git (1)
    • 회고 (1)
    • Java (2)
      • Java 기본 사용법 (2)
      • Collections (0)
    • 개발자의 글쓰기 (0)
    • 디자인 패턴 (1)
    • JavaScript (2)
    • Kotlin (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • xcode13
  • dart 설치
  • chocolatey
  • Swift
  • struct
  • Terminal
  • 제어문
  • xcode
  • swift random
  • flutter install
  • CLASS
  • Storyboard
  • random number
  • Xcode Theme
  • func
  • 플러터 설치
  • optional
  • Dark mode
  • chocolatey install
  • SwiftUI
  • flutter
  • dart
  • Java
  • flutter 설치
  • chocolatey 설치
  • IOS
  • nil
  • MAC
  • flutter dart
  • 스위프트

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
DevCho

Developer Blog

IOS/Swift

[Swift] Background Thread에서 Task 실행하기

2021. 12. 26. 01:59
반응형

Background Thread에서 Task 실행이 필요한 이유

예를 들어 우리가 서버에 특정한 데이터를 보내줄 것을 요청을 했다고 해보자. 그러면 다음과 같이 URLSession을 만들고 URLSession의 dataTask를 이용해 데이터를 받아온다음 메서드를 수행해야 한다.

func performURLRequest(with urlString: String) {
    if let url = URL(string: urlString) {
        let session = URLSession(configuration: .default)
        let task = session.dataTask(with: url) { (data, response, error) in
            //get responseData
            self.dosomeThing(responseData: responseData)
        }
        task.resume()
    }
}

 

이때 만약 다음과 같이 메서드를 만들어 label UI를 업데이트 시킨다면 responseData가 올때까지 UI Thread(main Thread)가 블로킹 된다. 

func doSomething(responseData: responseData) {
    label = responseData.name
}

 

Background Thread에서 실행하는 방법

따라서 우리는 이를 비동기적으로 백그라운드 스레드에서 실행시킬 방법을 찾아야 한다. Swift에서는 DispatchQueue.main.async { } 를 이용해 Background Thread에서 Task를 실행할 수 있다. 따라서 위의 코드를 다음과 같이 바꾼다면 백그라운드 스레드에서 데이터를 받아온다음 UI를 업데이트 시킬 수 있다.

func doSomething(responseData: responseData) {
    DispatchQueue.main.async {
        label = responseData.name
    }
}

 

반응형

'IOS > Swift' 카테고리의 다른 글

[Swift] 위치 권한 요청 방법 및 요청 문구 변경 방법 알아보기  (0) 2021.12.26
[Swift] extension 키워드 이용해 타입 기능 확장하기  (0) 2021.12.26
[Swift] internal parameter name과 external parameter name  (0) 2021.12.25
[Swift] JSONDecoder 사용하여 JSON 데이터 파싱하기  (0) 2021.12.25
[Swift] 함수형 프로그래밍 알아보기 : 클로저(Closures), 일급객체  (0) 2021.12.25
    'IOS/Swift' 카테고리의 다른 글
    • [Swift] 위치 권한 요청 방법 및 요청 문구 변경 방법 알아보기
    • [Swift] extension 키워드 이용해 타입 기능 확장하기
    • [Swift] internal parameter name과 external parameter name
    • [Swift] JSONDecoder 사용하여 JSON 데이터 파싱하기
    DevCho
    DevCho
    개발자의 개발 공간

    티스토리툴바