¿Cuándo usar las categorías Objective-C?

Si tengo un método para adjuntar una animation a un UI Element , en lugar de copyr / pegar el código de este método en muchos viewcontrollers , ¿puedo crear una class para mantener el método y luego importarlo?

Supongo que no tiene sentido usar una category en esta instancia porque necesito este método en varios viewcontrollers , y una category es una extensión de un solo viewcontroller .

Una categoría es una extensión de una class, no de una instancia específica de una class. Y, cualquier modificación que una categoría hace a una class está disponible para todas las subclasss (como con otros methods en classs en OOP).

Por lo tanto, si agrega una categoría en NSObject , básicamente todas las classs de toda su aplicación tienen acceso a los methods en esa categoría; por lo tanto, debe tener mucho cuidado con los methods que agrega allí.

Si agrega una categoría o una class auxiliar es una preference personal en muchos casos, ambos funcionarán.

Editado el 9 de abril de 2015

Tienes dos opciones básicas:

Cree una categoría o cree una subclass personalizada.

Categorías

Las categorías le permiten agregar methods a una class completa, incluso classs para las que no tiene el código fuente. Las categorías son especialmente útiles para agregar nuevos methods a las classs del sistema donde el sistema crea el object dentro de frameworks, donde no puede cambiar las cosas para crear una subclass personalizada en su lugar.

Puede agregar una categoría a una class base como UIView, y los methods que agregue estarán disponibles para esa class y todas sus subclasss. Por lo tanto, puede agregar una categoría de animation a UIView y, a continuación, todos los objects de UIView, incluyendo vistas de imágenes, botones, controles deslizantes, etc., obtendrían los methods definidos en esa categoría.

Las categorías lo ayudan a evitar el hecho de que no hay inheritance múltiple en Objective-C. (En el ejemplo anterior de agregar comportamiento de animation a UIViews, no puede crear una subclass de UIView AnimationView y luego crear un UITextView que henetworkinge tanto de UITextView como de AnimationView y también crear un UIImageView que henetworkinge de AnimationView).

Hay un par de limitaciones significativas para las categorías:

  1. Realmente no pueden anular el código de los methods ya existentes. (Pueden hacerlo, pero no puede llamar a la súper implementación, y si hay varias categorías con implementaciones del mismo método, los resultados están indefinidos, por lo que no debería hacerlo).

  2. Las categorías no pueden agregar nuevas variables de instancia a las classs que extienden. (Hay forms de simular esto usando una técnica llamada almacenamiento asociativo, pero eso está más allá del scope de esta publicación.

Subclasss personalizadas

Una subclass personalizada puede anular los methods existentes. También puede agregar nuevos methods, properties y variables de instancia. Sin embargo, no puede agregar methods a una subclass existente como una categoría.

Por qué usar categorías por ejemplo:

Digamos que tiene un motor de class base que es henetworkingado por classs como coche, bicicleta y scooter. La compañía era una empresa emergente y estaba dispuesta a agregar una funcionalidad de mantenimiento que no se brindó anteriormente.

Engine of Car, Bike and Scooter se mantendrá bajo las mismas políticas. Por lo tanto, es mejor agregar más funcionalidades en la class de motor en lugar de cada vehículo. Al hacerlo, se supone que no debemos alterar la class Engine porque puede que no esté disponible para alterar. Simplemente crea una categoría

 Engine+Maintenance 

y todas las funcionalidades que ponga en mantenimiento estarán disponibles en todas las subclasss. Un mejor enfoque

Las categorías son una forma de dividir una sola definición de class en múltiples files. Su objective es aliviar la carga de mantener bases de códigos grandes mediante la modularización de una class. Esto evita que su código fuente se convierta en 10000+ files de línea monolíticos que son imposibles de navegar y facilita la asignación de porciones específicas y bien definidas de una class a desarrolladores individuales

Las categorías son una alternativa de subclass. Cuando agregamos un método a una class existente, se convierte en parte de los methods de esa class. Entonces, cualquier instancia de esa class puede acceder a ese método. Sin embargo, no significa que cuando agregue un método a alguna class existente como NSString o NSArray, la class agregará su método a su definición de manera universal. Solo significa que dentro de ese proyecto, su class NSString o NSArray tendrá otro método definido por usted, y cualquier class (dentro de ese proyecto en particular) que lo está subclasificando o creando una instancia de esa class tendrá ese método como un parte de la definición de esa class.

Por lo tanto, puede agregar su animation al elemento de interfaz de usuario deseado agregando un método a través de la categoría a la class UIView de ese elemento de interfaz de usuario. Digamos que su elemento de interfaz de usuario es un button. Ahora, si crea una categoría para el button UIB, cada vez que crea una instancia de UIB, puede tener automáticamente un método para animarlo.

Subclasificar es una forma de agregar funcionalidad a un object, pero evitar subclasss innecesarias mediante el uso de una categoría ayudará a networkingucir la cantidad de código y a mantener sus proyectos más organizados.

https://developer.apple.com/library/content/documentation/General/Conceptual/DevPedia-CocoaCore/Category.html

Las categorías son una subclass de una class específica. Por ejemplo, si desea cambiar el color del text, el background y la fuente de la label sin código de progtwigción, debe crear una categoría de class UILabel.