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