我想知道Objective-C风格。
我有FooClass。[hm]依赖于BarClass。[hm]的实现(虽然不是它的接口)。我可以直接在FooClass.m中#import "BarClass.h"
或通过FooClass.h间接地{{1}}。我想知道这个的共同选择。
答案 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
中。