Документ унаследовал методы Obj-C без предупреждений Doxygen / compiler? - PullRequest
7 голосов
/ 16 июня 2009

Справочная информация:

Я создаю иерархию составных структур данных словаря в Objective-C и наследую от NSMutableDictionary , поэтому эти классы можно использовать везде, где требуется NSDictionary / NSMutableDictionary. (Чтобы люди не думали, что я заново изобретаю колесо, каждый из них использует CFMutableDictionaryRef , плюс некоторую дополнительную структуру, которая хранит ключи в отсортированном порядке, порядке вставки и т. Д.) В соответствии с документацией Apple Я переопределил необходимые примитивы NSDictionary и примитивы NSMutableDictionary , которые используются всеми другими методами в этих классах.

Цель:

Поскольку я стремлюсь документировать API для моей платформы настолько полно, насколько это разумно, я бы хотел, чтобы документация для моих пользовательских подклассов (созданная Doxygen) включала описания наиболее распространенных методов NS ( Изменяемый) словарь, поэтому пользователям не нужно просматривать другую страницу только для методов, которые конкретный пользовательский словарь наследует без изменений. Кроме того, иногда документация должна отражать различные функциональные возможности, вызванные переопределенными примитивными методами, хотя реализация метода не отличается от NS (Mutable) Dictionary.

Проблема:

Я не получаю ошибок / предупреждений, когда задокументированы только переопределенные методы. Если я добавлю комментарии, которые документируют унаследованные методы, Doxygen будет жаловаться (и не будет выдавать указанную документацию), если я не добавлю прототип метода в файл заголовка. Если я добавляю прототип, компилятор выдает предупреждение о том, что реализация завершена, поскольку он не включает определение метода для объявленного метода. Очевидно, что это тот случай, когда метод существует в родительском классе, но компилятор мешает его реализации, поскольку прототип по существу повторно объявлен в подклассе.

Вопросы:

  • Можно ли заставить Xcode / gcc подавлять «определения методов для« X »not found» предупреждений для методов, унаследованных от родительского класса?
  • Можно ли заставить Doxygen создавать документацию для метода, для которого нет деларации? Я пытался использовать команду \fn, но получил те же результаты.
  • Можно ли обмануть Doxygen, думая, что документация, которую я пишу, действительно применима к NSMutableDictionary, и все же она отображается для всех моих пользовательских подклассов?

Edit:

Насколько я могу судить, ответ на первый вопрос - и да, и нет. Технически, с помощью опции -Wno-protocol (или снятия флажка с предупреждением «Incomplete Objective-C Protocols» в настройках сборки Xcode) делает заставляет GCC подавлять предупреждения времени компиляции о классах, которые не кажется, чтобы реализовать все методы протокола. Однако это маскирует проблему для классов, которые действительно не реализуют все необходимые методы. Для построения структуры, которая использует множество протоколов, это действительно не вариант. В настоящее время GCC, похоже, не знает о методах, унаследованных от связанного (не исходного) родительского класса.

1 Ответ

2 голосов
/ 18 июня 2009

Насколько я знаю, ответ на три вопроса: нет.

Я хотел бы обратить ваше внимание на тот факт, что документация Apple не документирует унаследованные методы в документации подкласса.

Более того, NSDictionary и NSMutableDictionary не так уж редки, когда им требуется напоминание об их наиболее распространенных методах. Для меня достаточно ссылки на существующую документацию, как у вас уже есть.

Что касается вашего специфического поведения этих распространенных методов в вашем подклассе, я бы просто вставил специальный раздел в Подробное описание главу.

В любом случае, возможный обходной путь - дать объявление и реализацию ваших унаследованных методов. Но это немного излишне просто для документации:

- (NSArray *) allValues
{
    return [super allValues];
}
...