Objective-C @class / import最佳实践

时间:2010-03-14 18:48:05

标签: c++ objective-c

我注意到很多Objective-C示例都会使用@class转发声明类,然后实际导入带有导入的.m文件中的类。我理解这被认为是最佳做法,如问题答案中所述:@class vs. #import

来自C ++,这感觉倒退了。我通常会在新类头文件中包含所有需要的.h文件。这看起来很有用,因为它会使编译器在两个类相互包含时生成警告,此时我可以决定这是不是坏事,然后使用相同的Objective-C样式并转发声明标题中的类和将它包含在.cpp文件中。

在实现文件中正向声明@class和导入有什么好处? 在C ++中转发声明类而不是包含头文件应该是最佳实践吗? 或者从这些类似的术语开始考虑Objective-C和C ++是错误的吗?

1 个答案:

答案 0 :(得分:7)

老实说,你的C ++实际上是倒退的。通常在C ++中,您希望避免将标头包含在其他标头中,而不是将前向声明包含在其中。这通常被认为是最佳实践,因为它减少了编译时间,并将提供给编译器的预处理代码文件的大小缩小到所需的最小值。 Scott Meyers在Effective C ++中有很多关于它的内容。

为了更直接地回答你的问题,前向声明类的优势,以及在实现文件中导入它们(在C ++和目标c中)的优点,基本上是前向声明使得任何其他使用你的类的类都没有必须要包括你班级使用的所有东西。这减少了预处理代码文件的大小(这使得预处理更快),使编译更快,链接更快。所有这些通常都是好事。在更简陋的情况下,减少包含语句可以更容易地找到某些类型的错误(比如在标题中丢失分号),这些错误会产生编译器警告,这些警告并不总是很明显,但是在包含标题的情况下会重复并发送垃圾邮件。