Начал проходить курс по GSD и конечно не все сразу понятно) Вопрос по первому приложению, в котором мы загружаем изображение с сервера.
Для того что бы произвести загрузку мы создали отдельную очередь и поместили в нее “загрузку”. Затем мы возвращаемся в главный поток и обновляем интерфейс уже с помощью загруженного изображения. Вот код из урока:
fileprivate func fetchImage() {
imageURL = URL(string: "https://upload.wikimedia.org/wikipedia/commons/0/07/Huge_ball_at_Vilnius_center.jpg")
activityIndicator.startAnimating()
activityIndicator.isHidden = false
let queue = DispatchQueue.global(qos: .utility)
queue.async {
guard let url = self.imageURL, let imageData = try? Data(contentsOf: url) else {return}
DispatchQueue.main.async {
self.image = UIImage(data: imageData)
}
}
}
Во многих похожих уроках на просторах интернета, очередь не создают, а пишут примерно так:
DispatchQueue.main.async {
guard let url = self.imageURL, let imageData = try? Data(contentsOf: url) else { return }
self.image = UIImage(data: imageData)
}
И первый вариант и второй работают. И там и там нет “подвисания” интерфейса. Так какой вариант правильней и в чем их разница? я просто пока не совсем понимаю зачем создавать отдельную очередь, когда во втором варианте кода меньше, а результат (на первый взгляд ))) ) тот же самый.