Pregunta

Background:

Estoy creando una jerarquía de estructuras de datos de diccionarios compuestos en Objective-C, y estoy heredando de NSMutableDictionary para que estas clases puedan usarse en cualquier lugar donde se requiera un NSDictionary / NSMutableDictionary. (Para que la gente no piense que estoy reinventando la rueda, cada uno usa un CFMutableDictionaryRef , más alguna estructura adicional que almacena las claves en orden ordenado, orden de inserción, etc.) De acuerdo con la documentación de Apple, he anulado la y NSMutableDictionary primitives que utilizan todos los otros métodos en esas clases.

Goz :

Ya que me esfuerzo por documentar las API para mi marco tan completamente como sea razonable, me gustaría que documentación para mis subclases personalizadas (generada por Doxygen) para incluir descripciones de los métodos más comunes de NS (Mutable) Dictionary, por lo que los usuarios no tienen que mirar otra página solo a los métodos que un particular El diccionario personalizado hereda sin cambios. Además, a veces la documentación debe reflejar la funcionalidad diferente causada por los métodos primitivos anulados, aunque la implementación del método no ha cambiado con respecto al Diccionario NS (mutable).

Problema :

No obtengo errores / advertencias cuando solo se documentan los métodos anulados. Si agrego comentarios que documentan métodos heredados, Doxygen se queja (y no producirá dicha documentación) a menos que agregue un prototipo de método al archivo de encabezado. Si agrego un prototipo, el compilador emite una advertencia de que la implementación está completa, ya que no incluye una definición de método para el método declarado. Obviamente, este es un caso en el que el método existe en la clase principal, pero el compilador está siendo muy agresivo al implementarlo, ya que el prototipo se ha vuelto a declarar en la subclase.

Preguntas :

  • ¿Es posible hacer que Xcode / gcc suprima "definición de método de 'X' no encontrada " ¿Advertencias para métodos heredados de una clase padre?
  • ¿Es posible forzar a Doxygen a crear documentación para un método para el cual no existe delaración? Intenté usar el comando \ fn , pero obtuve los mismos resultados.
  • ¿Es posible engañar a Doxygen para que piense que la documentación que escribo en realidad se aplica a NSMutableDictionary y, sin embargo, aparece para todas mis subclases personalizadas?

Editar:

Por lo que puedo decir, la respuesta a la primera pregunta es sí y no. Técnicamente, utilizando el -Wno- la opción del protocolo (o al desmarcar la " Incomplete los Protocolos de Objective-C " la advertencia en la configuración de compilación de Xcode) hace que GCC suprima las advertencias en tiempo de compilación sobre las clases que no Parece que implementan todos los métodos de protocolo. Sin embargo, esto enmascara el problema para las clases que realmente no implementan todos los métodos necesarios. Para crear un marco que haga un uso intensivo de los protocolos, eso realmente no es una opción. Actualmente, parece que GCC no conoce los métodos heredados de una clase principal vinculada (no de origen).

¿Fue útil?

Solución

Por lo que sé, la respuesta a sus tres preguntas es: no.

Me gustaría llamar su atención sobre el hecho de que la documentación de Apple no documenta los métodos heredados en la documentación de las subclases.

Además, NSDictionary y NSMutableDictionary no son tan infrecuentes que necesiten un recordatorio de sus métodos más comunes. Para mí, un enlace a la documentación existente, como ya lo ha hecho, es suficiente.

Sobre su punto de comportamiento específico de estos métodos comunes en su subclase, simplemente insertaría una sección dedicada en el capítulo Descripción detallada .

De todos modos, una posible solución sería dar una declaración y una implementación de sus métodos heredados. Pero es un poco excesivo solo para fines de documentación:

- (NSArray *) allValues
{
    return [super allValues];
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top