2010-12-10 6 views
1

Ich bin ein C++ Entwickler, der in die iPhone-Welt übergeht, und ich würde gerne Hilfe um etwas bekommen.Umgang mit veralteten Symbolen und Methoden beim Erstellen für mehrere iOS-Versionen

Sagen wir zum Beispiel, MPMoviePlayerController verwendet, um die MPMoviePlayerContentPreloadDidFinishNotification Benachrichtigung in iOS 3.1 und früher zu veröffentlichen.

Diese Benachrichtigung ist jetzt jedoch veraltet.

Ich möchte, dass meine App auf jedem iPhone mit iOS 3 und höher ausgeführt werden kann.

Wenn ich mit base sdk 4.2 entwickle, wenn ich meine App auf einem iphone mit iOS 3.2 installiere, was wird passieren? Ist die App mit dem sdk verlinkt (wie zum Beispiel mfc static link)?

Wenn ich richtig verstehe, auf iPhone mit iOS 3.2 zum Beispiel, wird diese Benachrichtigung immer noch aufgerufen werden. (Wenn ich eine Funktion auf einem früheren SDK anrufe, vorausgesetzt, es ist nicht statisch verknüpft, wie ich oben gefragt habe).

Bedeutet das, dass wenn ich jetzt eine neue App schreibe, ich immer noch auf diese veralteten Benachrichtigungen aufpassen muss?

Ich kann nicht meinen Kopf herum und würde jede Erklärung schätzen.

Dank

Antwort

2

Wenn Sie ein Symbol verwenden, die mit iOS 4.2 auf einem Gerät enthalten war, die 3,2 Sie begegnen einem Absturz läuft.

Die Möglichkeit, dies zu umgehen, besteht darin, neue Symbole bedingt zu verwenden, abhängig davon, ob sie zur Laufzeit verfügbar sind oder nicht.

Eg.

if (&NewNotificationSymbol != NULL) 
{ 
    // awesome, it's not NULL, we can use it 
} 
else 
{ 
    // not so awesome, we'll use the old, deprecated one 
    // but at least we won't crash 
} 

Der gleiche Ansatz kann für die Klassen verwendet werden, die in 4.x neu sind, wenn auch auf 3.x ausgeführt wird:

if (NSClassFromString(@"MyAwesomeNewClass") != nil) 
{ 
    // awesome, it's not NULL, we can use it 
} 
else 
{ 
    // not so awesome, we'll use the old, deprecated one 
    // but at least we won't crash 
} 

Als Faustregel sollten Sie immer kompilieren und verknüpfen gegen Das neueste iOS-SDK, das mit den Entwicklertools bereitgestellt wird, und anschließend die Buildeinstellung für das Bereitstellungsziel auf die älteste Version von iOS, die Sie unterstützen möchten. Verwenden Sie dann diese Bedingungen, um neue Funktionen zu verwenden und einen fehlerfreien Fallback ohne Absturz zu verwenden, wenn sie nicht verfügbar sind.

+0

Danke für deine Antwort Jasarien, aber all die Dinge, die du gesagt hast, wusste ich bereits, ich wollte die Logik darunter verstehen. – Idan

+0

Wenn du meine Frage noch einmal lesen kannst und ausführst, wäre das großartig. Danke! – Idan

+0

Ich bin mir nicht sicher, ob ich vollständig verstehe, was du zu fragen versuchst. Soweit meine Antwort geht, denke ich, es deckt die Tatsache ab, dass, ja, Sie müssen immer noch die älteren 3.x-Benachrichtigungen sowie neue 4.x-Benachrichtigungen mit dieser bedingten Methode behandeln. – Jasarien