【问题标题】:Document inherited Obj-C methods without Doxygen/compiler warnings?在没有 Doxygen/编译器警告的情况下记录继承的 Obj-C 方法?
【发布时间】:2010-11-03 09:52:18
【问题描述】:

背景:

我正在 Objective-C 中创建复合字典数据结构的层次结构,并且继承自 NSMutableDictionary,因此这些类可以在需要 NSDictionary/NSMutableDictionary 的任何地方使用。 (只是为了让人们不认为我在重新发明轮子,每个人都使用CFMutableDictionaryRef,加上一些以排序顺序、插入顺序等存储键的额外结构。)根据 Apple 的文档,我已经覆盖了这些类中所有其他方法使用的必要的NSDictionary primitivesNSMutableDictionary primitives

目标:

由于我努力尽可能完整地记录我的框架的 API,我希望 documentation for my custom subclasses(由 Doxygen 生成)包含对 NS(Mutable)Dictionary 最常用方法的描述,因此用户不要'不必查看其他页面,只需查看特定自定义字典未更改继承的方法。此外,有时文档必须反映由重写的原始方法引起的不同功能,尽管方法实现与 NS(Mutable)Dictionary 没有变化。

问题:

当只记录被覆盖的方法时,我没有收到任何错误/警告。如果我添加记录继承方法的 cmets,Doxygen 会抱怨(并且不会生成所述文档),除非我将方法原型添加到头文件中。如果我添加一个原型,编译器会发出一个执行完成的警告,因为它不包含声明方法的方法定义。显然,这是一种方法存在于父类中的情况,但编译器在实现它时一直很坚持,因为原型本质上是在子类中重新声明的。

问题:

  • 是否可以让 Xcode/gcc 抑制从父类继承的方法的“未找到 'X' 的方法定义”警告?
  • 是否可以强制 Doxygen 为不存在声明的方法创建文档?我尝试使用\fn 命令,但得到了相同的结果。
  • 是否有可能让 Doxygen 认为我编写的文档实际上适用于 NSMutableDictionary,但它却出现在我的所有自定义子类中?

编辑:

据我所知,第一个问题的答案是肯定的和否定的。从技术上讲,使用-Wno-protocol option(或取消选中 Xcode 构建设置中的“不完整的 Objective-C 协议”警告)确实会导致 GCC 抑制关于似乎没有实现所有类的编译时警告协议方法。然而,这掩盖了真正实现所有必要方法的类的问题。对于构建一个大量使用协议的框架,这真的不是一个选择。目前,GCC 似乎不知道从链接(非源)父类继承的方法。

【问题讨论】:

    标签: objective-c cocoa xcode gcc doxygen


    【解决方案1】:

    据我所知,对你三个问题的回答是:没有。

    我想提请您注意,Apple 文档没有记录子类文档中的继承方法。

    此外,NSDictionaryNSMutableDictionary 并不少见,需要提醒他们最常用的方法。对我来说,现有文档的链接就足够了。

    关于您对子类中这些常用方法的具体行为的观点,我只想在详细说明一章中插入一个专门的部分。

    无论如何,一种可能的解决方法是同时给出继承方法的声明和实现。但这仅出于文档目的有点矫枉过正:

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

    【讨论】:

    • 无需提请注意 Apple 文档的做法,我很清楚这一点。但是,他们的文档是通过 HeaderDoc 和手动调整创建的。此外,类没有指向其子类的链接,因此导航不如 Doxygen 或 Javadoc 容易。但是,您提出了一个很好的观点,即期望用户知道在哪里可以找到任何其他方法的文档。因此,我从标题中删除了额外的方法文档,并且警告消失了。仅当方法被覆盖并更改继承的行为时才包含文档。感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 2015-09-24
    • 2018-01-29
    • 1970-01-01
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多