Lectura a través de la documentación de Apple en Tips and Techniques for Framework Developers, me encontré con esta declaración acerca de inicializadores designados:¿Cuándo una clase tendrá alguna vez más de un inicializador designado?
Un inicializador designado es un método init de una clase que invoca una
init
método de la superclase. (Otros inicializadores invocan los métodosinit
definidos por la clase.) Cada clase pública debe tener uno o más inicializadores designados.
(Énfasis añadido.)
Con base en mi entendimiento y, de hecho, el uso de la palabra "designado", una clase debe tener sólo un inicializador designado. Pero según la documentación, son aceptables múltiples inicializadores designados.
Suponiendo que tiene dos (o más) inicializadores designados, su función es llamar al inicializador designado de la superclase para garantizar la inicialización adecuada del objeto. Pero si ambos inicializadores designados están llamando al inicializador designado de la misma superclase, entonces, ¿por qué había necesidad de más de uno desde el principio? ¿No debería refactorizarse la clase para canalizar todos los demás métodos init
al singular inicializador designado?
Estoy un poco confundido en cuanto a qué caso de uso o patrón de diseño requeriría para múltiples inicializadores designados?
A veces los parámetros de cada inicializador son demasiado diferentes para canalizarlos al mismo inicializador "designado". La recomendación es que tenga los inicializadores con los parámetros más mínimos, llame a un inicializador único con la mayoría de los parámetros, pero eso no siempre tiene sentido. – spstanley
Incluso en el caso donde su clase podría tener inicializadores con parámetros ampliamente diferentes, ¿no debería un inicializador ser responsable de llamar al inicializador designado de la superclase? ¿No debería el otro ajustar sus parámetros y consecuentemente llamar internamente al inicializador designado? – LucasTizma