Comment vérifier si une constante est définie au moment de l'exécution? Par exemple, dans iOS 4, UIApplicationDidEnterBackgroundNotification est disponible, mais lors de l'exécution sur iOS 3, il y aura une erreur si vous essayez de l'utiliser.iPhone, vérifiez l'existence de la constante
6
A
Répondre
12
Vous devriez probablement regarder this other question, qui à mon avis répond également à la vôtre. if (&UIApplicationWillEnterForegroundNotification != NULL)
devrait être dynamic-linking-safe et vous dire si la constante existe ou non.
Si vous utilisez LLVM, vous devez faire quelques astuces pour ne pas optimiser votre instruction if. Cela fonctionne pour moi. BOOL backgroundOK = & UIApplicationDidEnterBackgroundNotification! = NULL; if (backgroundOK) { [[NSNotificationCenter defaultCenter] addObserver: sélecteur automatique: @selector (applicationDidEnterBackground :) nom: UIApplicationDidEnterBackgroundNotification bject: nil]; } –
Est-ce que ce bogue d'optimisation a déjà été corrigé dans le compilateur LLVM/Clang? Dans quelle version? –
Ce n'est pas un bug dans LLVM, mais une fonctionnalité. LLVM optimisera les instructions sans effets secondaires et c'est bon. Mais cela rend les choses un peu plus difficiles pour ce type de code. – Romain