2010-01-08 14 views
6

The Objective-C Runtime Reference dice:Objective-C Runtime

“en desuso” abajo significa “obsoleta en Mac OS X versión 10.5 para el código de 32 bits, y no permitidos para el código de 64 bits.”

y me gustaría usar class_setSuperclass en Max OS X versión 10.5 aunque aún puedo hacerlo, el compilador me advierte que está en desuso, pero sigue construyendo y el paquete aún se puede usar.

Mi pregunta es ¿cuál sería el equivalente en Max OS X 10.5?

+0

jajaja Al menos está documentado: * "** Consideraciones especiales ** No debe usar esta función" * – OscarRyz

+4

¿Con qué propósito desea usar 'class_setSuperclass'? Dependiendo de eso, las personas pueden sugerir otras soluciones sin usar 'class_setSuperclass'. – Yuji

+0

Mi razón para usar class_setSuperclass es escribir un parche para solucionar algunos problemas en Microsoft Entourage en virtud de 10.5 no mostrar HTML de la forma en que lo hace Apple Mail y con parche me refiero a un complemento SIMBL. – fernyb

Respuesta

5

Supongo que usarlo probablemente no sea una buena idea. Sé que con el cambio hacia 64 bits varias cosas en el tiempo de ejecución cambiaron y no tuvieron un reemplazo.

Los documentos incluso dicen explícitamente no tocar, y no da excepción a eso.

Sin embargo, puede utilizar class_addMethod para agregar funcionalidad a una clase preexistente dada. Sin embargo, eso también es posible por categorías.

Puede usar class_replaceMethod para anular también un método, otro método posible es usar una categoría (o class_addMethod) para agregar un método de reemplazo. Luego, usando method_exchangeImplementations, puede cambiarlos para tener el original disponible para llamar.

En general, aunque la mayoría de esto es un vudú oscuro, ya menos que te sientas cómodo y dispuesto a probar mucho, buscaría un diseño alternativo.

+1

En lugar de utilizar los métodos class_setSuperclass y swizzle, usaré class_addMethod y luego swizzle. – fernyb

1

Es posible que no haya un equivalente directo.

Sé que cada vez que jugué con la jerarquía de clases en el tiempo de ejecución me quemaron. Debería poder lograr los mismos resultados, aunque de forma más amplia por delegación, y me imagino que eso es lo que quieren.