【问题标题】:Objective-C: Importing headers in .h or .m?Objective-C:在 .h 或 .m 中导入标头?
【发布时间】:2009-05-14 15:02:33
【问题描述】:

我是 Objective-c 的新手,想知道导入一些我在课堂上使用的外部头文件的最佳做法。

我应该将#import "classB.h" 存储在我自己的类 .h 文件还是 .m 文件中?

有什么区别?

谢谢!

【问题讨论】:

标签: objective-c


【解决方案1】:

正确的做法是在标题中放置前向类声明 (@class classB;),在 .m 中放置 #import "classB.h

像@class classB; 这样的前向类声明让编译器知道它应该稍后期待该类,并且此时它不应该抱怨它。

【讨论】:

  • 我认为您的第一句话是“in the .m”。
【解决方案2】:

为避免循环引用,仅在另一个类的头文件中#import 一个头文件(如果它是从该类继承的)。否则,如果你需要在头文件中使用@class ClassName声明类类型,并在实现文件中#import它。

【讨论】:

  • 值得一提的是,您无法使用#import 指令获得循环引用。
  • @JasonCoco 所以我不需要像 Marc 在这里解释的那样担心头文件中的#import?
【解决方案3】:

对于编译器来说,这真的无关紧要。您可以在 .h 中抛出前向声明,然后等待 #import 直到您的 .m 文件。有关更多信息,请参阅 SO 上的 this 帖子。

从干净代码的角度来看,有些人可能会争辩说,将导入放在您的实现文件中可以使细节更接近需要它们的位置(也请参见上面的链接;那里的人参考了这个想法)。

【讨论】:

    【解决方案4】:

    建议您在头文件中导入其他头文件。这样您就可以在头文件和实现文件中使用该类(因为实现文件 (.m) 会导入其关联的头文件)。

    如果你想知道什么时候导入文件,什么时候使用前向类声明,你可以去here。 ;-)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多