Estoy cambiando la clase de algunos objetos usando object_setClass(id object, Class cls)
. Estoy cambiando la clase a una subclase de la clase original. Luego establezco algunas propiedades que solo están definidas en la subclase, y las cosas parecen funcionar bien.object_setClass a clase más grande
Estaba un poco sorprendido de que esto funcionara, porque object_setClass
, por lo que yo entiendo, no reasigna el objeto, solo cambia el puntero isa
. Si las instancias de la subclase son considerablemente más grandes (es decir, tienen muchos más ivars) que las instancias de la clase original, no veo cómo el objeto puede funcionar como se esperaba.
Funciona solo porque hay mucha memoria intermedia entre los objetos en la memoria (debido a la alineación, etc.)?
¿Es esto robusto o podría fallar bajo ciertas circunstancias?
gracias, eso es lo que tenía miedo y tiene sentido, por supuesto. No veo cómo su solución podría ayudar, porque no quiero crear un nuevo objeto. (No puedo, porque el objeto es una propiedad de solo lectura de otra clase). – Felixyz
Si es su código, puede organizar la propiedad que se creará con los bytes adicionales para que pueda cambiar la clase de forma segura más adelante. ¡Pero no creo que sea una buena idea cambiar la clase de una propiedad de solo lectura! ¿Por qué estás haciendo eso? – Yuji
Pensé que era un pequeño truco inteligente para modificar una vista cargada desde una punta. Pero recurriré a más métodos estándar. – Felixyz