objective-c design inheritance subclass objective-c-category

objective c - ¿Cuándo usar categorías y cuándo usar subclases?



objective-c design (4)

¿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.


Añadiendo 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 usa 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.

Subclases: 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: subclasificamos UIView para alterar su estado y comportamiento en nuestro código iOS.


Una categoría objetivo-c es útil si desea alterar 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 debe usar subclases en marcos de terceros y privados en lugar de una categoría.


  • ¿Desea cambiar algo que sucede como parte de las llamadas al marco durante el ciclo de vida de un objeto UI? Usa la subclase Anula los métodos respectivos, como init, drawrect, layoutsubviews, etc.

  • ¿Quieres algo de aplicación amplia, algo que está en
    Además de la funcionalidad existente, y no te importa si esto
    se vuelve disponible para todas las instancias de estas instancias preexistentes de la clase framework? 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.