반응형
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 |