Los enlaces débiles en iPhone se niegan a funcionar

Tengo una aplicación para iPhone que apunta principalmente a 3.0, pero que aprovecha las nuevas API cuando están disponibles. El código dice algo como esto:

if (UIApplicationDidEnterBackgroundNotification != NULL) { [nc addObserver: self selector: @selector(irrelevantCallbackName:) name: UIApplicationDidEnterBackgroundNotification object: nil]; } 

Ahora, de acuerdo con todo lo dicho por Apple, si las API relevantes están débilmente vinculadas, eso funcionará bien porque el enlazador dynamic evaluará UIApplicationDidEnterBackgroundNotification como NULL . Excepto que no. La aplicación comstack, pero tan pronto como se golpea if (UIApplicationDidEnterBackgroundNotification != NULL) se bloquea con EXC_BAD_ACCESS .

¿Es esto simplemente una cuestión de una bandera del comstackdor que necesito establecer? ¿O estoy yendo sobre esto de la manera incorrecta?

Aaand lo descubrí. Para los símbolos que no son funciones ( extern const int foobar , por ejemplo), tiene que comparar con la dirección del símbolo, no el símbolo en sí, así que:

 if (&UIApplicationWillEnterForegroundNotification != NULL) etc; 

Lo cual, en retrospectiva, es algo obvio, pero sigo culpando a todo el universo a mi alrededor por no mencionar la distinción.

Esto es lo que tuve que hacer cuando comprobé una constante de marco externo.

 const CLLocationAccuracy * ptr = &kCLLocationAccuracyBestForNavigation; BOOL frameworkSupports = (ptr != NULL); if (frameworkSupports) { return kCLLocationAccuracyBestForNavigation; } else { return kCLLocationAccuracyBest; } 

No funcionaría sin la variable ptr.