¿Cómo puedo agregar variables y métodos de miembro a una clase incorporada (por ejemplo, NSString) sin crear subclases?cómo agregar una variable miembro y métodos a una clase integrada sin crear subclases
Respuesta
Las "Categorías" le permiten agregar métodos, pero no variables de miembro, a las clases existentes.
Consulte la sección de este tutorial sobre ellas (busque en la página): http://cocoadevcentral.com/d/learn_objectivec/ O busque Categorías en Objective-C en cualquier otro lugar.
No se pueden agregar vars de instancia sin subclases.
Puede agregar algo similar a variables de instancia mediante referencias asociativas (como señala Laurent). – bbum
Puede agregar métodos miembro a una clase sin crear subclases creando una categoría, pero esto no le permitirá agregar variables miembro.
Aunque se pueden hacer muchas cosas en tiempo de ejecución en objetivo-c que no se pueden hacer en otros idiomas (ver runtime reference) Realmente no recomendaría este hacker para agregar una variable de instancia a una clase existente.
¿Te importaría explicar el motivo por el que no quieres hacer una subclase? Una subclase o categoría realmente parece ser lo mejor que se puede hacer.
Para métodos: puede usar categories para agregar métodos de miembros sin crear subclases. Es una práctica bastante común en Cocoa, agregar métodos de extensiones por marco.
Variables de ejemplo: comenzando con Snow Leopard (Mac OS X 10.6), puede usar associative references. Los usa para simular la adición de variables de instancia de objeto a una clase existente.
El Objective-C Programming Language es bastante completo sobre lo que puede hacer con referencias y categorías asociativas.
No puede. A veces es una mala idea subclasificar (tal vez estás trabajando con un clúster de clase, por ejemplo), por lo que las personas a menudo trabajan en esto creando una nueva clase (una subclase de NSObject, no de la clase en cuestión) que contiene un variable de instancia cuyo tipo es la clase en cuestión, así como las variables adicionales deseadas.
Por ejemplo, si desea crear una subclase de NSString con un BOOL adicional llamado "foo" ...
@interface StringWithFoo : NSObject
{
NSString* string;
BOOL foo;
}
... y luego poner en práctica los métodos que necesita, o cree un descriptor de acceso público por lo que puede llamar directamente a los métodos en la cadena, o incluso utilizar engaños de tiempo de ejecución sofisticados para reenviar los mensajes de manera apropiada (haga una nueva pregunta si eso es lo que quiere hacer).
Esto es, en líneas generales, un ejemplo del decorator pattern.
- 1. Compartir una variable entre una clase y su miembro
- 2. Java: Crear subclases de una clase genericised
- 3. Encuadernación a una variable miembro
- 4. ¿Agregar una variable/método miembro a un generador de Python?
- 5. métodos de anulación sin subclases en Java
- 6. @AspectJ pointcut para subclases de una clase con una anotación
- 7. ¿Cómo obtener anotaciones de una variable miembro?
- 8. ¿Puedo usar métodos de una clase sin instanciar esta clase?
- 9. ¿Cómo se puede agregar programáticamente una variable de clase a una clase en Pharo?
- 10. tienda una referencia a una variable miembro de objetos con una clase diferente
- 11. ¿Puedo agregar métodos de extensión a una clase estática existente?
- 12. ¿Agregar una propiedad sin una variable de instancia?
- 13. Cuándo utilizar el puntero a una clase y cuándo simplemente crear una instancia como una variable
- 14. ¿Existe una forma integrada de identificar instancias de una clase?
- 15. Acceder a una variable de miembro protegida fuera de una clase
- 16. VBA Agregar una clase a una colección
- 17. Cómo agregar métodos de la clase de conveniencia a una clase Singleton en rubí
- 18. ¿Cómo hash y compara una función de puntero a miembro?
- 19. variable estática frente a miembro
- 20. ¿Cómo agregar @SerialVersionUID a una clase anónima?
- 21. ¿Cómo crear una matriz dinámica de una clase abstracta?
- 22. Cómo llamar al método __invoke de una variable miembro dentro de una clase
- 23. ¿Agregar métodos a una clase Java aumenta el uso de memoria de sus instancias?
- 24. ¿Cómo agregar un método a una clase existente en PHP?
- 25. Cómo hacer referencia a una variable de miembro de constante estática en PHP
- 26. ¿Cómo uso AutoMapper para mapear múltiples subclases en una clase?
- 27. Agregando una variable de instancia a una clase en Ruby
- 28. ¿Cómo declarar una variable miembro constante estática de una clase que implica algunos cálculos simples?
- 29. Crear un objeto sin llamar a una clase
- 30. Subclases de una clase que implementa una interfaz genérica
Se llaman variables * instance * en Objective C. –