Вопрос по курсу GСD. Загрузка изображения с сервера


#1

Начал проходить курс по 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)
    }

И первый вариант и второй работают. И там и там нет “подвисания” интерфейса. Так какой вариант правильней и в чем их разница? я просто пока не совсем понимаю зачем создавать отдельную очередь, когда во втором варианте кода меньше, а результат (на первый взгляд ))) ) тот же самый.


#2

let queue = DispatchQueue.global(qos: .utility)
queue.async {} - создаешь и используешь параллельную очередь

DispatchQueue.main.async {} - делаешь на мейн очереди

https://habrahabr.ru/post/320152/ - почитай статью, очень полезная


#3

Без разницы. Мне больше одной строкой нравится