【问题标题】:Objective-C @class / import best practiceObjective-C @class / 导入最佳实践
【发布时间】:2011-01-27 10:46:17
【问题描述】:

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

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

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

【问题讨论】:

标签: c++ objective-c


【解决方案1】:

说实话,你的 C++ 实际上是倒退的。通常在 C++ 中,您希望避免将标头包含在其他标头中,而更喜欢前向声明而不是包含。这通常被认为是最佳实践,因为它减少了编译时间,并将输入编译器的预处理代码文件的大小缩小到所需的小。 Scott Meyers 在 Effective C++ 中有一个很棒的部分。

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

【讨论】:

  • 简而言之,如果你做对了,所有 C++ .hpp 文件需要知道的就是类的名称。没有别的了。如果它需要知道更多,问问自己“为什么它需要知道,甚至关于其他类的接口?”。 W
猜你喜欢
  • 2013-11-08
  • 2010-11-11
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-21
  • 2018-02-28
  • 2016-07-03
相关资源
最近更新 更多