Comment définir les macros de préprocesseur dans les paramètres de construction, comme IPAD_BUILD et IPHONE_BUILD (et comment les utiliser dans mes méthodes d'usine)?
Je les utilise par cœur maintenant, ce serait cool de savoir ce qui se passe.
/ # si fonctionne comme d'habitude si:
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 30200
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
return YES;
}
#endif
return NO;
}
/ # ifdef signifie "si défini - une valeur ou des macros":
#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
ou:
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#endif
Utilisez ce lien pour plus d'informations http://www.techotopia.com/index.php/Using_Objective-C_Preprocessor_Directives
Pour tester si vous utilisez iPad ou non, vous devriez avoir un smth comme ceci:
#define USING_IPAD UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad
if (USING_IPAD) {
NSLog(@"running iPad");
}
Voici une autre fonction de préprocesseur utile:
#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
Une macro peut être indéfinie, elle peut être définie sans valeur, ou elle peut être définie avec une certaine valeur, éventuellement un nombre. Exemples:
#undef MACRO
#define MACRO
#define MACRO ??????
#define MACRO 0
#define MACRO 1
#ifdef MACRO ou #if defined (MACRO) vérifie si la macro est définie, avec ou sans valeur.
#si MACRO remplace la définition de macro; si la macro n'est pas définie, elle remplace 0. Elle évalue alors l'expression qu'elle trouve. Si nous prenons les cinq exemples ci-dessus, # si MACRO sera transformé en
#if 0
#if
#if ??????
#if 0
#if 1
Les numéros 2 et 3 donnent une erreur de temps de compilation. Les nombres 1 et 4 ont la valeur false, donc le code suivant est ignoré. Le numéro 5 est évalué comme vrai.
#if est plus flexible: vous pouvez écrire
#if MACRO == 2
qui ne compilera le code suivant que si la macro a été définie par exemple comme
#define MACRO 2