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

Фон:

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

Цель:

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

Проблема:

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

Вопросы:

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

Редактировать:

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

1 ответ

Решение

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

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

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

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

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

- (NSArray *) allValues
{
    return [super allValues];
}
Другие вопросы по тегам