Обновление для Xcode 5 и iOS 7
примечание: для решения Xcode 7 / Swift 2.1 для удаления print () операторов в сборке выпуска найдите мой ответ здесь .
Да, вы должны удалить любой оператор NSLog в своем коде выпуска, так как он просто замедляет ваш код и не используется в версии выпуска. К счастью, в Xcode 5 (iOS 7) удивительно просто удалить все ваши операторы NSLog «автоматически» в сборках релиза. Так почему бы не сделать это.
Сначала сделайте 3 шага, затем объяснение
1) в вашем проекте XCode найдите файл 'yourProjectName-prefix.pch' (обычно вы найдете его в группе «файлы поддержки», где находится файл main.m
2) добавить эти 3 строки в конец файла .pch:
#ifndef DEBUG
#define NSLog(...);
#endif
3) проверить разницу между вашей версией «отладка» и «выпуск». Один из способов сделать это - «изменить схему» -> «запустить имя приложения» -> на вкладке «информация» выбрать, используя раскрывающийся список между отладкой и выпуском. В версии релиза вы не увидите вывод NSLog в консоли отладки!
Как все это работает?
Прежде всего, нужно знать, что препроцессор относительно «тупой» и просто действует как «заменитель текста» перед вызовом компилятора. Он заменяет все, что вы '#define', на то, что следует за оператором #define
.
#define NSLog(...);
(...)
обозначает «что-нибудь» между скобками (). Помните также ;
в конце. Это не является строго необходимым, так как компилятор оптимизирует это, но мне нравится помещать его туда, так как это более «правильно». После нашего #define
появляется «ничто», поэтому препроцессор заменит его на «ничто» и просто отбросит всю строку, начиная с NSLog...
до ;
.
Определить операторы можно условно, используя #ifdef
(если определено) или #ifndef
(если не определено)
здесь мы пишем #ifndef DEBUG
, что означает «если символ DEBUG не определен». #ifdef
или #ifndef
должны быть закрыты с #endif
Xcode 5 по умолчанию определяет символ 'DEBUG' для нас, когда режим de build равен 'DEBUG'. В «выпуске» это не определено. Вы можете проверить это в настройках своего проекта, вкладка «Настройки сборки» -> прокрутите вниз до раздела «Apple LLVM 5.0 - Предварительная обработка» -> макросы препроцессора. Вы увидите, что символ 'DEBUG' не определен для сборок релиза!
наконец, файл .pch автоматически создается XCode и автоматически включается в каждый исходный файл во время компиляции. Так что вы бы поместили целую вещь #define
в каждый из ваших исходных файлов.