¿Por qué OC no tiene métodos absolutamente privados?
OC es un lenguaje muy dinámico. Incluso si escribimos una variable privada, aún podemos forzar su modificación a través de KVC, lo cual aún no es seguro. Entonces es seguro escribir propiedades directamente en la extensión de la clase (llamada clase).
El significado de la existencia extensional. Después de escribir una extensión de clase, KVC no puede acceder a las propiedades, pero sí a los métodos.
Debido al mecanismo de mensajería dinámica de Objective-C, no existen métodos privados reales en OC. Los métodos privados simplemente no tienen documentación pública y también se pueden llamar usando atributos de tiempo de ejecución.
Porque: en tiempo de compilación, incluso si este método no está declarado en el archivo de encabezado, el compilador aún compilará la firma del método en la lista de métodos de la clase. Al enviar un mensaje, buscará automáticamente la lista de mensajes y, si encuentra un mensaje con el mismo nombre, se activará.
Llamar al método privado:
SEL selector = NSSelectorFromString(@ "método privado");
objeto * ob =[[object alloc]init];
IMP IMP =[obmethodForSelector:selector];
typedefvoid (*func_t)(id, SEL);
func _ t func = (func _ t) imp;
func(ob, selector);
//Método privado:
- (void)privateMethod {
NSLog ( @"private");
}
Acceder y modificar variables privadas:
[object setValue:@ " value " for key:@ " key " ] ;