2009-08-17 12 views

Répondre

8

Je ne pense pas qu'il existe un équivalent de classe, mais vous pouvez échanger l'implémentation de deux méthodes, ce qui était souvent le but de l'utilisation de poseAsClass: (bien sûr, vous pouvez échanger plus d'une méthode si vous avez besoin de remplacer plusieurs méthodes dans une classe). Vous voulez method_exchangeImplementations dans le runtime Objective-C 2.0 (#import objc/runtime.h). Un mot d'avertissement: après l'appel de method_exchangeImplementations, l'appel de la méthode 'new' appelle la définition de la méthode d'origine.

+0

Merci! J'ai réussi à faire en sorte que cela fonctionne, en utilisant une combinaison de la réponse de mcandre et de la documentation à laquelle vous vous êtes connecté. Une note rapide: J'ai dû '#include 'objc/runtime.h" 'afin d'utiliser les méthodes que vous décrivez. –

7

Lap Cat donne une alternative.

+0

+1 et merci pour l'excellent lien –

2

Qu'est-ce que vous essayez de faire? Il y a souvent des façons de poser. Je concéderai, cependant, que c'est parfois le seul moyen :)

+0

J'essaie de garder une trace de tous les messages de liaison (et de déconnexion) dans une application Cocoa. Je veux 'NSLog()' certaines informations de débogage chaque fois qu'une liaison est faite entre un objet et un autre. J'ai fini par utiliser 'method_exchangeImplementations' sur les méthodes de liaison pour' NSObject', et cela a fait l'affaire. –

+0

On dirait que vous faites bien :) Je serais méfiant de le faire dans le code de livraison. –