28

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

+1

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) –

+0

¿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? –

Respuesta

40

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.

+0

Gracias por su rápida respuesta ... –

+0

@coneybeare, ¿Podemos decir que la Categoría no cambia los objetos donde la subclase cambia el objeto? por favor dígame – Sandy

+0

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

8

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.

13

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.

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

+0

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

Cuestiones relacionadas