Domanda

Sfondo:

Sto creando una gerarchia di strutture di dati del dizionario composito in Objective-C e sto ereditando da NSMutableDictionary , pertanto queste classi possono essere utilizzate ovunque sia richiesto un NSDictionary / NSMutableDictionary. (Solo così le persone non pensano che sto reinventando la ruota, ognuna usa un CFMutableDictionaryRef , oltre ad alcune strutture aggiuntive che memorizzano le chiavi in ??ordine ordinato, ordine di inserimento, ecc.) In linea con la documentazione di Apple, ho ignorato il necessario NSDictionary primitives e NSMutableDictionary primitives utilizzato da tutti gli altri metodi di tali classi.

Obiettivo:

Dato che mi sforzo di documentare le API per il mio framework nel modo più ragionevole possibile, vorrei documentazione per le mie sottoclassi personalizzate (generata da Doxygen) per includere le descrizioni dei metodi più comuni del dizionario NS (mutabile), quindi gli utenti non devono guardare un'altra pagina solo per i metodi che un particolare il dizionario personalizzato eredita invariato. Inoltre, a volte la documentazione deve riflettere le diverse funzionalità causate dai metodi primitivi ignorati, sebbene l'implementazione del metodo sia invariata dal Dizionario NS (mutabile).

Problema:

Non ricevo errori / avvisi quando sono documentati solo i metodi sostituiti. Se aggiungo commenti che documentano metodi ereditati, Doxygen si lamenta (e non produrrà detta documentazione) a meno che non aggiunga un prototipo di metodo al file di intestazione. Se aggiungo un prototipo, il compilatore avvisa che l'implementazione è completa, poiché non include una definizione del metodo per il metodo dichiarato. Ovviamente, questo è un caso in cui il metodo esiste nella classe genitore, ma il compilatore è un pignolo sull'implementazione dal momento che il prototipo è essenzialmente ridecritto nella sottoclasse.

Domande:

  • È possibile rendere Xcode / gcc sopprimere la definizione del metodo "X" per "X" non trovata avvertimenti per metodi ereditati da una classe genitore?
  • È possibile forzare Doxygen a creare documentazione per un metodo per il quale non esiste alcuna delarazione? Ho provato a usare il comando \ fn , ma ho ottenuto gli stessi risultati.
  • È possibile ingannare Doxygen nel pensare che la documentazione che scrivo in realtà si applica a NSMutableDictionary, ma è apparso per tutte le mie sottoclassi personalizzate?

Modifica:

Per quanto ne so, la risposta alla prima domanda è sia sì che no. Tecnicamente, usando -Wno- protocollo (o deselezionando l'avviso "Protocolli obiettivo-C incompleti" nelle impostazioni di compilazione Xcode) fa sì che GCC elimini gli avvisi in fase di compilazione sulle classi che non sembra implementare tutti i metodi di protocollo. Tuttavia, questo maschera il problema per le classi che in realtà non implementano tutti i metodi necessari. Per la creazione di un framework che faccia uso di protocolli, questa non è un'opzione. Attualmente, GCC non sembra conoscere i metodi ereditati da una classe genitore collegata (non di origine).

È stato utile?

Soluzione

Per quanto ne so, la risposta alle tue tre domande è: no.

Vorrei attirare la vostra attenzione sul fatto che la documentazione Apple non documenta i metodi ereditati nella documentazione delle sottoclassi.

Inoltre NSDictionary e NSMutableDictionary non sono così insoliti da richiedere un promemoria dei loro metodi più comuni. Per me è sufficiente un collegamento alla documentazione esistente, come hai già fatto.

Riguardo al tuo punto di comportamento specifico di questi metodi comuni nella tua sottoclasse, vorrei solo inserire una sezione dedicata nel capitolo Descrizione dettagliata .

In ogni caso, una possibile soluzione alternativa sarebbe quella di fornire sia una dichiarazione che un'implementazione dei metodi ereditati. Ma è un po 'eccessivo solo a scopo di documentazione:

- (NSArray *) allValues
{
    return [super allValues];
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top