Cuando algo es se considera buena/mala práctica, es más o menos subjetivo. Al hacer algo es intrínsecamente correcto/incorrecto, es más o menos objetivo.
isKindOfClass:
es un método útil para verificar la herencia de clases. Responde a la única pregunta, "¿es el objeto de una clase que es (una subclase de) una clase determinada?". No responde ninguna otra pregunta como "¿este objeto implementa ese método a su manera?" o "¿Puedo usar el objeto para X o Y?". Si usa isKindOfClass:
según lo previsto, no tendrá ningún problema. Después de todo, en un lenguaje de tipado dinámico, debe tener herramientas para extraer metainformación sobre los objetos. isKindOfClass:
es solo una de las herramientas disponibles.
El hecho de que ciertos objetos mientan sobre su clase no debería desanimarlo. Simplemente se disfrazan como objetos de otra clase sin romper nada. Y si eso no rompe nada, ¿por qué debería importarme?
Lo principal es que siempre debe recordar usar la herramienta correcta para cualquier propósito. Por ejemplo, isKindOfClass:
no sustituye a respondsToSelector:
o conformsToProtocol:
.
La implementación de métodos en categorías para evitar la necesidad de utilizar herramientas de introspección me suena peor. iE NSJSONSerialization 'JSONObjectWithData: options: error:' podría devolver diferentes tipos. (Matriz, diccionario).piratear el método del diccionario en arreglos y viceversa suena extremadamente estúpido para mí. – vikingosegundo
¿Qué pasa si solo una subclase necesita tener un método? –
Si solo una subclase necesita tener un método, entonces tiene un método en la clase base con una implementación predeterminada que no hace nada, y un método reemplazado en la subclase que hace algo. –