你把#import放在.h或.m文件中吗?

时间:2010-05-05 02:20:42

标签: objective-c

我想知道Objective-C风格。

我有FooClass。[hm]依赖于BarClass。[hm]的实现(虽然不是它的接口)。我可以直接在FooClass.m中#import "BarClass.h"或通过FooClass.h间接地{{1}}。我想知道这个的共同选择。

2 个答案:

答案 0 :(得分:47)

您应该始终 #import .m个文件中的其他课程。

如果他们碰巧也是您班级的成员,您可以在@class文件中转发声明(使用.h指令)。

执行此操作的原因是,当您#import .h个文件时,您只想导入声明,而不是定义。通过在@class文件中使用#import.m,您可以减少开销,并且b)使代码更清晰。

Matt Gallagher指出了你应该这样做的另一个原因:

  

头文件中的前向声明背后的原因是它避免了不必要的依赖。即Imagine B.h前锋宣布A和B.m进口A.h.然后想象C.m,D.m,E.m和F.m导入B.h.完成所有这些后,A.h会改变。由于A仅在B.h中向前声明,因此只有B.m需要重建。没有前瞻声明,如果A改变,则需要重建C.m,D.m,E.m和F.m

示例:

.h档案

@class BarClass;

@interface FooClass : NSObject

...

@end

.m档案

#import "BarClass.h"

@implementation FooClass

...

@end

答案 1 :(得分:0)

  • .h文件-类的公共interface
  • .m文件-类的私有implementation

我的规则是:

  • @class文件中的转发声明[About]-.h
  • 您应减少.h的进口量
  • 应将重音符号导入.m文件中,以防止相关性问题

如果您需要implementation中的内容,则应将其导入.m中。如果您需要interface中的内容,则应将其导入.h中。

了解有关import angle brackets <> and quote marks ""

的信息