如何配置Doxygen以正确记录Objective-C类别

时间:2011-01-04 18:10:00

标签: objective-c doxygen categories

Doxygen似乎对Objective-C类别进行了特殊处理,我想知道其他人是否能够成功解决它。我想doxygen将类中的所有类别记录为单独的实体,而不管是否记录了基类。

如果我将doxygen标记添加到未记录的基类的类别 - 比如NSString,那么doxygen会将类列表中的类别及其方法列为单独的实体。

/**
 *   @category NSString(Foo)
 *   @brief A sample category on NSString
 */
 @interface NSString(Foo)
 @end

在类列表中记录实体NSString(Foo)。

但是,以下示例

/**
 *    @category CCFMyCustomClass(Foo)
 *    @brief A category on a documented base class
 */
@interface CCFMyCustomClass(Foo)
@end

相反,在后一种情况下,CCFMyCustomClass(Foo)上的所有方法都包含在CCFMyCustomClass的文档中 - 基类。

以下虽然经常被引用,但似乎没有帮助解决这个问题:

4 个答案:

答案 0 :(得分:3)

您可以跳过Doxygen并使用AppleDoc

  

appledoc是命令行工具,可帮助Objective-C开发人员从特殊格式的源代码注释中生成类似Apple的源代码文档。它旨在为输入提供尽可能可读的源代码注释,并使用注释以及周围的源代码,以HTML的形式生成视觉上吸引人的文档以及完全索引和可浏览的Xcode文档集。虽然有几种工具可以为Objective-C创建HTML文档,但我所知道的所有这些工具都达不到下述最低目标。

也可在GitHub

上找到

答案 1 :(得分:0)

一个解决方案,虽然不理想,但是为类别方法创建一个组,以便至少它们在基类文档页面上组合在一起。

符合上面的第二个例子:

/** @name    CCCFMyCustomClass(Foo)
             Methods defined only in CCFMyCustomClass(Foo) category */
//@{

/**
 *
 * @method someFooMethod
 * @brief  Does some foo things
 * @details First foo, then more foo, etc.
 */
- (void)someFoodMethod;

//@}

除此之外,我发现没有其他方法可以在记录的基类上分离出类别。

答案 2 :(得分:0)

我想再投票给Appledoc。对于Objective-C而言,比Doxygen更容易获得良好的结果。

答案 3 :(得分:0)

我记录了我的类(在头文件中),如:

/**
 @interface MyAppDelegate
 @mainpage  The iPhone App

 This is information about my app, and appears in the main HTML page.\n\n

 As with all iOS apps, the main entry point is an App Delegate @see MyAppDelegate
 @defgroup Classes Classes
 @{
 @brief Miscellaneous Classes

 Classes that don't fit in any other category
 @{
*/
/**
 @brief The application's delegate

 A delegate object is instantiated by the main function, so this is effectively the main entry point for the app
 @see MyAppDelegate()
 */
@interface MyAppDelegate : UIResponder <UIApplicationDelegate>
...
@end

/** @} */

/** @} */

.m文件有一个扩展类别,我有自己的私有扩展方法。这看起来像:

/**
 @category MyAppDelegate(internal)
 @addtogroup Classes
 @{
 */

/**
 @brief Application delegate class extension

 Internal extension for the application delegate
 @see MyAppDelegate
 */
@interface MyAppDelegate()
...
@end

/** @} */

@implementation MyAppDelegate
...
etc

我得到两个html页面 - 对于MyAppDelegate和MyAppDelegate()第一个包括一个see-also for the second,虽然see-also在第二个回到第一个不起作用(看起来有问题使用@see category()。然而,方法在两个页面之间正确分割。

我认为关键是只记录不在@implementation块内的Objective-C @interface块内的方法。我还使用@defgroup和@addtogroup块将特定类型的所有模块(如View Controllers,Models等)组合在一起。

我希望这有助于某人