Ответ 1
Да, это замедляет работу кода.
Как print
, так и println
снижают производительность приложения.
Проблема с печатью
println
не удаляется, когда Swift оптимизирует код.
for i in 0...1_000 {
println(i)
}
Этот код не может быть оптимизирован, и после компиляции код сборки выполнил цикл с 1000 инструкциями, которые на самом деле не делают ничего ценного.
Анализ кода сборки
Проблема заключается в том, что компилятор Swift не может оптимально оптимизировать код с помощью команд print
и println
.
Вы можете увидеть это, если вы посмотрите на сгенерированный код сборки.
Вы можете увидеть код сборки с помощью Hopper дизассемблера или путем компиляции кода Swift на сборку с помощью swiftc
компилятора:
xcrun swiftc -emit-assembly myCode.swift
Оптимизация быстрого кода
Давайте рассмотрим несколько примеров для лучшего понимания.
Компилятор Swift может устранить много ненужного кода, например:
- Пустые вызовы функций
- Создание объектов, которые не используются
- Пустые циклы
Пример:
class Object {
func nothing() {
}
}
for i in 0...1_000 {
let object = Object3(x: i)
object.nothing()
object.nothing()
}
В этом примере Swift-компилятор выполнит эту оптимизацию:
1. Удалите вызовы методов nothing
После этого тело цикла будет иметь только 1 команду
for i in 0...1_000 {
let object = Object(x: i)
}
2. Затем он удалит создание экземпляра Object
, потому что он фактически не используется.
for i in 0...1_000 {
}
3. Последний шаг - удаление пустого цикла.
И мы закончили без кода для выполнения
Решение
- Комментарий
print
иprintln
Это определенно не лучшее решение. //println("A")
- Использовать инструкцию
DEBUG
препроцессора
С помощью этого решения вы можете легко изменить логику вашей функции debug_print debug_println("A)
func debug_println<T>(object: T) {
#if DEBUG
println(object)
#endif
}
Заключение
Всегда удаляйте print
и println
из приложения выпуска.
Если вы добавите инструкцию print
и println
, код Swift не может быть оптимизирован самым оптимальным способом, и это может привести к большим штрафам за производительность.