UI와 관련된 작업은 메인스레드에서 작업된다. 만약 이미지 파일을 다운받아 파일을 생성하고, 이를 화면에 적용하여 리프레시해야한다면 어떻게해야할까.
만약 이미지 다운로드를 메인스레드에서 실행하게 된다면, 이미지 파일이 다운이 완료될때까지 UI 리프레시는 실행되지 않고 블락되는 문제가 발생한다.
따라서 이 경우에는 이미지 다운로드를 백그라운드에서 해주어야 한다.
(예시)
func addImageFile(){
guard let imageUrl = URL(string: "http..") else {
return
}
guard let targetUrl = currentDirectoryUrl?.appending("파일")
.appendingPathExtension("jpg") else {
return
}
DispatchQueue.global().async { //백그라운드 실행
do {
let data = try Data(contentsOf: imageUrl)
try data.write(to: targetUrl, options: .atomic)
} catch {
print(error)
}
//주의: UI관련한 메소드는 메인 스레드에서
DispatchQueue.main.async{
self.refreshContents()
}
}