2009-08-17 8 views

Respuesta

8

No creo que haya un equivalente de nivel de clase, pero puede intercambiar la implementación de dos métodos, que a menudo era el propósito de usar poseAsClass: (por supuesto, puede intercambiar más de un método si necesita anular múltiples métodos en una clase). Desea method_exchangeImplementations en el tiempo de ejecución de Objective-C 2.0 (#import objc/runtime.h). Una palabra de advertencia: después de llamar a method_exchangeImplementations, llamar al 'nuevo' método realmente llama a la definición del método original.

+0

¡Gracias! Me las arreglé para hacer que esto funcione, usando una combinación de la respuesta de mcandre y la documentación a la que se vinculó. Una nota rápida: tuve que '#incluir" objc/runtime.h "' para usar los métodos que describes. –

7

Lap Cat da una alternativa.

+0

+1 y gracias por el excelente enlace –

2

¿Qué estás tratando de hacer? A menudo hay maneras de posar. Sin embargo, admitiré que a veces es la única forma :)

+0

Estoy tratando de realizar un seguimiento de todos los mensajes de enlace (y desvinculación) en una aplicación Cocoa. Quiero 'NSLog()' cierta información de depuración cada vez que se realiza un enlace entre un objeto y otro. Terminé usando 'method_exchangeImplementations' en los métodos de enlace para' NSObject', y funcionó. –

+0

Parece que lo está haciendo bien :) Sería cauteloso al hacerlo en el código de envío. –

Cuestiones relacionadas