7

背景:

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

目标:

由于我努力尽可能完整地记录我的框架的 API,我希望我的自定义子类(由 Doxygen 生成)的文档包括对 NS(Mutable)Dictionary 最常用方法的描述,因此用户不要必须查看另一个页面,以查看特定自定义字典继承的方法未更改。此外,有时文档必须反映由覆盖的原始方法引起的不同功能,尽管方法实现与 NS(Mutable)Dictionary 没有变化。

问题:

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

问题:

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

编辑:

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

4

1 回答 1

2

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

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

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

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

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

- (NSArray *) allValues
{
    return [super allValues];
}
于 2009-06-18T09:34:37.140 回答