2010-07-03 6 views
6

Wie können Sie überprüfen, ob eine Konstante zur Laufzeit gesetzt ist? In iOS 4 ist beispielsweise UIApplicationDidEnterBackgroundNotification verfügbar. Wenn Sie jedoch unter iOS 3 ausgeführt wird, tritt bei der Verwendung ein Fehler auf.iPhone, auf Vorhandensein von Konstante prüfen

Antwort

12

Sie sollten wahrscheinlich auf this other question aussehen, was meiner Meinung nach beantwortet Ihnen auch. if (&UIApplicationWillEnterForegroundNotification != NULL) sollte dynamic-linking-safe sein und Ihnen sagen, ob die Konstante existiert oder nicht.

+0

Wenn Sie LLVM verwenden, müssen Sie einige Tricks, um es nicht Ihre if-Anweisung zu erhalten optomize aus. Das funktioniert für mich. BOOL backgroundOK = & UIApplicationDidEnterBackgroundNotification! = NULL; if (backgroundOK) { [[NSNotificationCenter defaultCenter] addObserver: Selbstwähler: @selector (applicationDidEnterBackground :) Name: UIApplicationDidEnterBackgroundNotification bject: nil]; } –

+0

Wurde dieser Optimierungsfehler bereits im LLVM/Clang-Compiler behoben? In welcher Version? –

+0

Es ist kein Fehler in LLVM, aber eine Funktion. LLVM wird Aussagen ohne Nebeneffekt optimieren und es ist gut. Aber es macht Sachen für diese Art von Code etwas härter. – Romain