Работает ли код на DispatchQueue.main.async медленнее?

При создании метки, которая использует данные из API в замыкании, которое возвращает данные из этого API:

APIData().getRequest(epicGamesUsername: "test") { (output) in

        DispatchQueue.main.async {

            let winsLabelForProfile = Label().createLabel(labelText: output[0], font: "Avenir-HeavyOblique", fontSize: 45, center: center, centerX: centerX, centerY: centerY, offsetX: 0, offsetY: -(self.view.frame.width / 13), height: self.view.frame.width / 6, width: self.view.frame.width / 2, textAlignment: NSTextAlignment.center)

            self.view.addSubview(winsLabelForProfile)

        }

Я должен поместить создание этикетки обратно в основной поток.

Мой вопрос прост: добавление метки таким образом замедлит мое приложение? Если так, что является лучшим способом сделать это?

Когда я тестирую добавление метки без асинхронного добавления, она определенно выглядит быстрее.

1 ответ

Торговля игнорируется, если APIData().getRequest не вызывается очень часто. Так как это связано с сетью, я не думаю, что это так, и на практике нет накладных расходов.

Также помните, что если у вас есть некоторые проблемы с производительностью, вы должны использовать инструменты Xcode, чтобы найти источник проблем, вместо того, чтобы угадать, что вызывает проблемы с производительностью. Часто люди обвиняют некоторую часть кода, которая не несет ответственности за проблемы с производительностью (новички в пространстве), и они тратят время на оптимизацию того, что работает должным образом.

Сложность вашего кода постоянна во времени, поэтому, если у вас есть проблемы с производительностью, это не проблема.

оффтоп: этот кусок кода выглядит ужасно, его трудно читать и поддерживать. Подумайте об упрощении, разбейте его на несколько строк.
На самом деле это выглядит как плохой анализ, поскольку сетевой уровень должен быть близок к части пользовательского интерфейса. У вас нет модели данных, которая должна поддерживать структуру данных и бизнес-логику.

Другие вопросы по тегам