2010-12-10 34 views
1

Je suis un développeur C++ qui fait la transition vers le monde iPhone, et j'aimerais obtenir de l'aide pour quelque chose.Traitement des symboles et des méthodes obsolètes lors de la construction de plusieurs versions d'iOS

Par exemple, MPMoviePlayerController utilisé pour publier la notification MPMoviePlayerContentPreloadDidFinishNotification dans iOS 3.1 et versions antérieures.

Toutefois, cette notification est désormais obsolète.

Je souhaite que mon application puisse fonctionner sur tous les iPhone disposant d'iOS 3 ou version ultérieure.

Si je développe en utilisant base sdk 4.2, quand j'installe mon application sur un iphone avec iOS 3.2, que se passera-t-il? Est-ce que l'application est associée au sdk (comme le lien statique de mfc par exemple)?

Si je comprends bien, sur iPhone avec iOS 3.2 par exemple, cette notification sera toujours appelée. (Si j'appelle une fonction sur un sdk plus tôt, en supposant qu'il ne soit pas lié statiquement comme je l'ai demandé ci-dessus). Est-ce que cela signifie que si j'écris une nouvelle application maintenant, je dois encore m'occuper de ces notifications obsolètes?

Je ne peux pas comprendre ce qui se passe et j'apprécierais toute explication.

Merci

Répondre

2

Si vous utilisez un symbole qui a été fourni avec iOS 4.2 sur un périphérique qui exécute 3.2, vous rencontrerez un accident.

La façon de contourner ce problème est d'utiliser de nouveaux symboles conditionnellement selon qu'ils sont disponibles ou non à l'exécution.

Par exemple.

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 
} 

La même approche peut être utilisée pour les classes qui sont nouveaux dans 4.x lors de l'exécution 3.x aussi:

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 
} 

En règle générale, vous devez toujours compiler et lier contre le dernier SDK iOS fourni avec les outils de développement, puis définissez votre paramètre de génération Cible de déploiement sur la version la plus ancienne d'iOS que vous souhaitez prendre en charge. Ensuite, utilisez ces conditions pour faire usage de nouvelles fonctionnalités et revenir en arrière avec élégance sans se bloquer si elles ne sont pas disponibles.

+0

Merci pour votre réponse Jasarien, mais toutes les choses que vous avez dites que je connaissais déjà, je voulais comprendre la logique sous-jacente. – Idan

+0

Si vous pouvez relire ma question et élaborer ce serait génial. Merci! – Idan

+0

Je ne suis pas sûr de comprendre parfaitement ce que vous essayez de demander. En ce qui concerne ma réponse, je pense que cela couvre le fait que, oui, vous devez toujours gérer les anciennes notifications 3.x ainsi que les nouvelles notifications 4.x, en utilisant cette méthode conditionnelle. – Jasarien