Как определить макросы препроцессора в настройках сборки, такие как IPAD_BUILD и IPHONE_BUILD (и как их использовать в моих методах factory)?
Я использую это наизусть сейчас, было бы здорово узнать, что происходит.
Как определить макросы препроцессора в настройках сборки, такие как IPAD_BUILD и IPHONE_BUILD (и как их использовать в моих методах factory)?
Я использую это наизусть сейчас, было бы здорово узнать, что происходит.
/# если работает как обычно, если:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
/# ifdef означает "если определено - некоторое значение или макросы":
#ifdef RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) _RKL_CONCAT(x, RKL_APPEND_TO_ICU_FUNCTIONS)
#else // RKL_APPEND_TO_ICU_FUNCTIONS
#define RKL_ICU_FUNCTION_APPEND(x) x
#endif // RKL_APPEND_TO_ICU_FUNCTIONS
или
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif
Используйте эту ссылку для получения дополнительной информации http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives
Чтобы проверить, работает ли iPad или нет, у вас должно быть что-то вроде этого:
#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
if (USING_IPAD) {
NSLog(@"running iPad");
}
Здесь используется еще один полезный препроцессор:
#ifdef DEBUG
//here we run application through xcode (either simulator or device). You usually place some test code here (e.g. hardcoded login-passwords)
#else
//this is a real application downloaded from appStore
#endif
Макросом может быть undefined, его можно определить без значения или его можно определить с некоторым значением, возможно, числом. Примеры:
#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1
#ifdef MACRO или #if (MACRO) проверяет, определен ли макрос, с или без значения.
#if MACRO заменяет определение макроса; если макрос не определен, он заменяет 0. Затем он вычисляет выражение, которое он находит. Если мы возьмем пять приведенных выше примеров, #if MACRO будет преобразован в
#if 0
#if
#if ??????
#if 0
#if 1
Число 2 и 3 дают ошибку времени компиляции. Число 1 и 4 оцениваются как false, поэтому следующий код пропускается. Число 5 соответствует true.
#if более гибкий: вы можете написать
#if MACRO == 2
который будет компилировать только следующий код, если макрос был определен, например, как
#define MACRO 2