Существует другое понятие, названное самоанализом типа, который относится к способности определить тип объекта во времени выполнения.
редактирование: Я понимаю, что Ваш вопрос был предназначен, чтобы быть агностиком языка, но в Java, отражение используется для идентификации, каких участников объект имеет, тогда как самоанализ позволяет Вам определять, какие свойства JavaBeans объект имеет, который является, почему класс самоанализа находится в java.beans пакете. Я не уверен, чем точное различие между условиями было бы на других языках, тем не менее,
Вы можете проверить наличие #ifdef DEBUG
, но я бы рекомендовал вам этого не делать.
Между сборками отладки и выпуска существует множество различий. Различные оптимизации компилятора, разные наборы символов и т. Д.
Вы неизбежно окажетесь в ситуации, когда вы захотите запустить сборку Release для вашей песочницы для целей отладки ... и вашу отладочную сборку для производственный веб-сервис, потому что у некоторых клиентов есть проблема, которая воспроизводится только в режиме Release.
Итак, для этого я бы предложил пользователю значение по умолчанию. См. NSUserDefaults
.
Обратите внимание, что простые пользовательские значения по умолчанию могут быть установлены из командной строки.
Таким образом, вы можете сделать что-то вроде:
/path/to/Myapp.app/Contents/Macos/Myapp -ServerMode Debug
Сначала определите символ препроцессора, который установлен только в вашей конфигурации сборки отладки, в соответствии с вопросом 367368 - назовите его, скажем, DEBUG. Затем вы можете выполнить
#ifdef DEBUG
// Code that only compiles in debug configuration
#else
// Code that compiles in other configurations (i.e. release)
#endif
Вы можете использовать специфичные для конфигурации определения, чтобы изменить выполняемый код. Сначала прочтите о том, как определить символ препроцессора в Xcode . Затем сделайте в своем коде что-то вроде этого:
#if DEBUG_MODE
#define BACKEND_URL @"http://testing.myserver.com"
#else
#define BACKEND_URL @"http://live.myserver.com"
#end
NSURLRequest *myRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:BACKEND_URL]];