Swift: Включите режим оптимизации или выпуска для одного класса

#swift #xcode #optimization

Вопрос:

У меня есть класс, который обрабатывает данные в режиме отладки за 3 секунды, но в режиме выпуска занимает всего 100 мс. Очевидно, что с ним что-то не так, но все тесты проходят, поэтому при его использовании мне не нужны никакие функции отладки.

Есть ли способ заставить Xcode запускать проект в режиме отладки, но выполнять всю оптимизацию выпуска для этого одного класса?

Единственный обходной путь, который я могу придумать, — это превратить это в платформу с флагом компиляции выпуска, но это кажется немного излишним.

Ответ №1:

Единственный обходной путь, который я могу придумать, — это превратить это в платформу с флагом компиляции выпуска, но это кажется немного излишним.

Это единственный стабильный способ сделать это на данный момент (с Xcode 13). Еще один вариант заключается в том, что вы можете попробовать выполнить некоторые измерения времени, возможно, удастся изменить ваш код так, чтобы даже код отладки давал лучшие результаты.

Если это одноразовый код, вы можете попробовать пометить отдельные функции с помощью подчеркнутого атрибута @_optimize(speed) .

Я повторю отказ от ответственности в верхней части документа:

ВНИМАНИЕ: Эта информация предоставляется в первую очередь разработчикам компиляторов и стандартных библиотек. Использование этих атрибутов за пределами Swift monorepo НАСТОЯТЕЛЬНО НЕ РЕКОМЕНДУЕТСЯ.

Комментарии:

1. Спасибо за ответ — вы упомянули Xcode 12; есть ли разница с Xcode 13? К сожалению, я не смог увидеть результаты, поэтому могу пойти по пути фреймворка. Просто потому, что я не могу найти больше документации или примеров использования этого флага, было @_optimize(speed) func ... бы правильным использование? Или мне нужно сделать что-то еще, например, другой флаг или разрыв строки и т.д.?

2. Он также должен работать с Xcode 13. Тем не менее, я не уверен на 100%, работает ли это для методов, я видел, как это используется только для функций.