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

StackOverflow https://stackoverflow.com/questions/1002653

Вопрос

Предыстория:

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

Цель:

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

Проблема:

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

Вопросы:

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

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

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

Это было полезно?

Решение

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

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

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

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

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

- (NSArray *) allValues
{
    return [super allValues];
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top