2011-05-27 15 views
10

¿Cómo puedo saber qué inicializador es el inicializador designado para CUALQUIER clase? Supongo que es el que toma la mayoría de los parámetros, pero podría haber ocasiones en que esto no sea correcto.¿Cómo sé qué inicializador es el inicializador designado?

+0

¿Qué quiere decir con "inicializador designado"? init es el estándar. – shawnwall

+1

@shawnwall: el inicializador designado es el método init ... que todos los demás métodos init ... llaman. P.ej. para 'UIView' y' NSView', esto es 'initWithFrame:' ​​(se menciona en la documentación). Consulte [aquí] (http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAllocInit.html#//apple_ref/doc/uid/TP30001163-CH22-106376) para obtener más información. – omz

Respuesta

6

La respuesta de omz se puede establecer más firmemente: La documentación para una clase de estructura especificará cuál es el inicializador designado. Es necesario saber qué es el inicializador designado para escribir subclases que se comporten correctamente. El D.I de la subclase debe invocar D.I de la superclase para estar seguro de que está correctamente inicializado.

Sin embargo, su suposición sobre la mayor cantidad de parámetros está bien fundada. Apple en realidad dice que es a menudo el D.I. en algunos lugares.

Cocoa Core Competencies

El inicializador de una clase que tiene la dotación completa de parámetros de inicialización suele ser el inicializador designado.

Cocoa Fundamentals

Algunas subclases proporcionan inicializadores de conveniencia que suministran valores por defecto a un inicializador que lleva el conjunto completo de parámetros de inicialización. Este inicializador suele ser el inicializador designado, el inicializador más importante de una clase.

+0

Gracias. Como siempre, ¡la respuesta está en los documentos! – lampShade

+0

@lampShade: :) ​​Como siempre. Otros marcos que Cocoa _deberían especificar el inicializador designado si pretenden que los usuarios subclases. Si no lo especifican así, ¡consiga un nuevo marco! ¡Encantado de ayudar! –

0

No se puede saber realmente esto sin mirar el código fuente (imposible para los marcos del sistema) o la documentación (potencialmente de una superclase).

+0

¡Oye, escribiste un estante de noticias! Me encanta esa aplicación. Leo mis feeds cada mañana en él. ¡Buen trabajo! – lampShade

0

De BigNerdRanch iOS libro de programación:

* El inicializador designado llama inicializador designado de la superclase (directa o indirectamente) antes de hacer cualquier otra cosa.

* Cualquier otro inicializador llama al inicializador designado de la clase (directa o indirectamente).

* Si una clase declara un inicializador designado que es diferente de su superclase, el inicializador designado de la superclase debe anularse para llamar al nuevo inicializador designado (directa o indirectamente).

Conway, Joe; Hillegass, Aaron; Keur, Christian (14/02/2014). Programación iOS: The Big Nerd Ranch Guide (4ª Edición) (Big Nerd Ranch Guides) (Ubicaciones Kindle 1906-1910). Educación Pearson. Versión Kindle.

Cuestiones relacionadas