Study/iOS
[iOS] Network Overview
쬬앤
2020. 4. 9. 11:09
guard let url = URL(string: picUrlStr) else {
fatalError("Invalid URL")
}
do {
let data = try Data(contentsOf: url)
imageView.image = UIImage(data: data)
} catch {
print(error)
}
네트워크 코드는 이런 식으로 구현하지 않는다.
메인스레드에서 실행. 메인스레드가 다른 기능을 실행하지 못한다.
모든 네트워크 코드는 백그라운드 스레드에서 실행해야 한다.
이 코드는 동기 API인데 네트워크 코드는 반드시 비동기 API로 해야한다.
밑에 부분을 삭제하고,
let task = URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print(error)
} else if let data = data {
let image = UIImage(data: data)
DispatchQueue.main.async {
self.imageView.image = image
}
}
}
task.resume()
이런 방식으로 코드를 작성해야 한다.
앞의 코드와 실행 결과는 똑같지만 메인스레드가 블로킹되지 않는다.
출처, 코드 인용 : KxCoding.com - Mastering iOS 강의
여러분의 새로운 도전을 응원합니다 | KxCoding
Mastering SwiftUI 더 적은 코드로, 더 멋진 UI 만들기
kxcoding.com