¿Alguien puede decirme cuándo usar las categorías y cuándo usar las subclases en Objective-C? También por favor dígame las ventajas y desventajas de ellos.Cuándo usar categorías y cuándo usar subclases?
Respuesta
Una categoría objetivo-c es útil si desea modificar el comportamiento de TODAS las instancias de la clase, con un código mínimo. La creación de subclases es más útil si desea modificar el comportamiento de solo ciertas instancias y conservar el método original para otras.
Las categorías pueden ser peligrosas, especialmente si no puede ver el origen del método original, por lo que generalmente debería usar subclases en marcos de terceros y privados en lugar de una categoría.
Gracias por su rápida respuesta ... –
@coneybeare, ¿Podemos decir que la Categoría no cambia los objetos donde la subclase cambia el objeto? por favor dígame – Sandy
Yo diría al revés. Una categoría cambia los métodos disponibles en una instancia de un objeto, donde la creación de subclases crea un nuevo objeto de un tipo diferente. – coneybeare
Agregando a lo que dijo coneybeare. La creación de subclases es una mejor opción para la personalización, y las categorías son mejores para usar cuando solo desea agregar alguna funcionalidad a las clases existentes.
Categoría: Se utiliza si queremos agregar cualquier método en una clase determinada cuya fuente no se conoce. Esto se usa básicamente cuando queremos alterar el comportamiento de cualquier clase.
Por ejemplo: si queremos agregar un método en NSString para invertir una cadena, podemos ir por categorías.
Subclassing: Si queremos modificar el estado así como el comportamiento de cualquier clase o anular cualquier método para alterar el comportamiento de la clase padre, entonces vamos a la subclasificación.
Por ejemplo: Nosotros subclasemos UIView para alterar su estado y comportamiento en nuestro código iOS.
¿Quieres cambiar algo que sucede como parte del marco llama durante el ciclo de vida de un objeto de interfaz de usuario? Usa la subclase anular respectivos métodos, tales como init, drawRect, etc. layoutsubviews
¿Quieres algo de ancho de aplicaciones, algo que está en
Además de la funcionalidad existente, y no le importa si esto
esté disponible a todas las instancias de estas instancias preexistentes de la clase de marco? Usar categorías Ejemplo: anima UILabel con determinada acción del usuario y aplica esta animación a través de tu aplicación a todas las instancias de UILabel.
Gracias por la respuesta. Tengo una duda; por favor corrígeme si me equivoco, aunque la categoría y las subclases se puedan usar indistintamente, pero lo que mencionas arriba es la mejor práctica. Al hacer esta afirmación, pensé en los casos de uso: anulando el comportamiento existente, agregando nuevas funciones, agregando variables para mantener el estado o cualquier otra propiedad. –
- 1. Cuándo usar undef_method, y cuándo usar remove_method?
- 2. Cuándo usar Pepino y cuándo usar RSpec?
- 3. cuándo usar Tarea y cuándo usar Subproceso?
- 4. ¿Cuándo usar == y cuándo usarlo?
- 5. Cuándo usar Ruby vs Cuándo usar PHP
- 6. ¿Cuándo debería usar TCP_NODELAY y cuándo TCP_CORK?
- 7. cuándo deberíamos usar instanceof y cuándo no
- 8. ¿Cuándo debería usar Silverlight y cuándo XNA?
- 9. Cuándo usar OSGi EventAdmin y cuándo no?
- 10. Cuándo usar .mdf y cuándo .sdf?
- 11. Cuándo usar Restringir y cuándo no a
- 12. Cuándo usar `zipmap` y cuándo` map vector`?
- 13. Cuándo usar GWT y cuándo no
- 14. Cuándo usar Class.isInstance() y cuándo usar el operador instanceof?
- 15. Cuándo usar componentes y cuándo usar extensiones en Yii?
- 16. Cuándo usar vectores y cuándo usar matrices en C++?
- 17. ¿Cuándo debería usar require() y cuándo usar define()?
- 18. Cuándo usar Requirejs y cuándo usar javascript incluido?
- 19. Cuándo usar assert() y cuándo usar try catch?
- 20. Cuándo usar y cuándo no usar Try Catch Finally
- 21. Cuándo deberíamos usar mutex y cuándo deberíamos usar el semáforo
- 22. Cuándo usar dup, y cuándo usar clon en Ruby?
- 23. Cuándo usar el sistema() y cuándo usar execv *()?
- 24. Cuándo usar un módulo y cuándo usar una clase
- 25. ¿Cuándo debe usar JCR y cuándo debe usar JPA/RDBMS?
- 26. Cuándo usar, no usar, OneToOne y ManyToOne
- 27. BitmapCache? ¿Cuándo y cómo usar?
- 28. ¿Cuándo usar stubs y mocks?
- 29. Cuándo usar señales y ranuras y cuándo no a
- 30. Cuándo usar interfaces o clases abstractas? Cuándo usar ambos?
posible duplicado de [Diferencia entre la herencia y categorías en Objetivo-c] (http://stackoverflow.com/questions/522341/difference-between-inheritance-and-categories-in-objective-c) –
¿Qué has descubierto sobre ellos hasta ahora? ¿Qué estás tratando de hacer con ellos? ¿Qué te lleva a creer que están relacionados de alguna manera? –