2010-01-08 4 views
6

The Objective-C Runtime Reference dit:Runtime Objective-C

« Obsolète » ci-dessous signifie « dépréciée sous Mac OS X version 10.5 pour le code 32 bits, et a refusé pour le code 64 bits. »

et je voudrais utiliser class_setSuperclass dans Max OS X version 10.5 même si je peux toujours le faire le compilateur donne un avertissement me disant qu'il est obsolète mais il continue à construire et le paquet est toujours utilisable.

Ma question est ce qui serait l'équivalent dans Max OS X 10.5?

+0

jajaja Au moins est documenté: * "** Considérations spéciales ** Vous ne devriez pas utiliser cette fonction" * – OscarRyz

+4

Dans quel but voulez-vous utiliser 'class_setSuperclass'? En fonction de cela, les utilisateurs peuvent proposer d'autres solutions sans utiliser 'class_setSuperclass'. – Yuji

+0

La raison de l'utilisation de class_setSuperclass est d'écrire un correctif pour corriger certains problèmes dans Microsoft Entourage sous 10.5 ne pas afficher HTML comme Apple Mail et par patch, je veux dire un plugin SIMBL. – fernyb

Répondre

5

Sur une estimation en utilisant ce n'est probablement pas une bonne idée. Je sais avec le changement vers 64 bits plusieurs choses dans l'exécution ont changé et n'ont pas eu un remplacement.

Les docs disent même explicitement de ne pas toucher, et ne font pas exception à cela.

Vous pouvez toutefois utiliser class_addMethod pour ajouter des fonctionnalités à une classe préexistante donnée. Cependant, cela est également possible via les catégories.

Vous pouvez également utiliser class_replaceMethod pour remplacer une méthode, une autre méthode possible consiste à utiliser une catégorie (ou class_addMethod) pour ajouter une méthode de remplacement. Ensuite, en utilisant method_exchangeImplementations, vous pouvez les échanger afin que l'original reste disponible pour les appels.

En général, même si la plupart de ceci est un sombre vaudou, et à moins que vous soyez à l'aise et que vous soyez prêt à tester beaucoup, je chercherais un design alternatif.

+1

Au lieu d'utiliser les méthodes class_setSuperclass et swizzle, je vais utiliser class_addMethod puis swizzle. – fernyb

1

Il se peut qu'il n'y ait pas d'équivalent direct. Je sais que chaque fois que j'ai joué avec la hiérarchie de classe à l'exécution, j'ai été brûlé. Vous devriez être en mesure d'obtenir les mêmes résultats, quoique de façon plus verbale par délégation, et j'imagine que c'est ce qu'ils veulent.