【发布时间】:2010-11-03 09:52:18
【问题描述】:
背景:
我正在 Objective-C 中创建复合字典数据结构的层次结构,并且继承自 NSMutableDictionary,因此这些类可以在需要 NSDictionary/NSMutableDictionary 的任何地方使用。 (只是为了让人们不认为我在重新发明轮子,每个人都使用CFMutableDictionaryRef,加上一些以排序顺序、插入顺序等存储键的额外结构。)根据 Apple 的文档,我已经覆盖了这些类中所有其他方法使用的必要的NSDictionary primitives 和NSMutableDictionary 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