Sur un projet passé (pré-iOS 4.0), j'ai écrit la méthode de la catégorie suivante sur NSSortDescriptor
:Est-il possible d'avoir une catégorie Objective-C chargée seulement si la méthode n'existe pas déjà?
+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending;
Quand Apple a publié le SDK iOS 4.0, il inclus exactement la même méthode (qui ne doute exactement la même chose). Est-il possible d'écrire une catégorie qui est seulement ajoutée au runtime soit si vous exécutez une version de système d'exploitation particulière, ou probablement plus au point, s'il n'y a pas déjà une méthode déclarée avec la même signature?
Dans ce cas, il est probablement sûr de remplacer la méthode sortDescriptorWithKey:ascending:
par une catégorie, ce qui donnera à la fois iOS 3 et iOS 4, puisque ma version fera presque certainement la même chose. Je préférerais ne pas jouer avec les méthodes définies par le système si possible, en raison de la possibilité (improbable) de casser les choses dans les cas limites.
Je ne dis pas que c'est forcément une bonne idée pour le code de production, mais serait-il possible de le faire en utilisant les fonctions 'runtime.h'? Dites d'utiliser 'class_addMethod' après avoir vérifié si une telle méthode existe déjà en utilisant quelque chose comme' class_getClassMethod'? –
Oui, comme Jeff a montré que c'est aussi possible, mais j'essaie d'éviter les hacks d'exécution quand c'est possible. –