Работает ли код на 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, чтобы найти источник проблем, вместо того, чтобы угадать, что вызывает проблемы с производительностью. Часто люди обвиняют некоторую часть кода, которая не несет ответственности за проблемы с производительностью (новички в пространстве), и они тратят время на оптимизацию того, что работает должным образом.
Сложность вашего кода постоянна во времени, поэтому, если у вас есть проблемы с производительностью, это не проблема.
оффтоп: этот кусок кода выглядит ужасно, его трудно читать и поддерживать. Подумайте об упрощении, разбейте его на несколько строк.
На самом деле это выглядит как плохой анализ, поскольку сетевой уровень должен быть близок к части пользовательского интерфейса. У вас нет модели данных, которая должна поддерживать структуру данных и бизнес-логику.