2010-07-03 15 views
6

¿Cómo se puede verificar si se establece una constante en el tiempo de ejecución? Por ejemplo, en iOS 4, UIApplicationDidEnterBackgroundNotification está disponible, pero cuando se ejecuta en iOS 3 se producirá un error si intenta usarlo.iPhone, compruebe la existencia de constante

Respuesta

12

Probablemente deberías mirar this other question, que en mi opinión también responde la tuya. if (&UIApplicationWillEnterForegroundNotification != NULL) debe ser dynamic-linking-safe y decirle si la constante existe o no.

+0

Si está utilizando LLVM, tiene que hacer algunos trucos para que no disminuya su estado de cuenta. Esto funciona para mí BOOL backgroundOK = & UIApplicationDidEnterBackgroundNotification! = NULL; if (backgroundOK) { [[NSNotificationCenter defaultCenter] addObserver: auto selector: @selector (applicationDidEnterBackground :) nombre: UIApplicationDidEnterBackgroundNotification bject: nil]; } –

+0

¿Este error del optimizador ya se ha corregido en el compilador LLVM/Clang? En que version? –

+0

No es un error en LLVM, sino una característica. LLVM optimizará las declaraciones de salida sin efectos secundarios y es bueno. Pero hace las cosas un poco más difíciles para este tipo de código. – Romain

Cuestiones relacionadas