保持标头和实现文件同步

时间:2009-11-24 03:34:45

标签: objective-c

我开始使用Objective-C,到目前为止,我认为.h和.m文件应该与方法细节同步。但是,似乎我可以在.m文件中添加方法而无需在.h文件中添加sig,并且它仍然可以正常编译!

例如这在.m文件中工作,而在AddressCard.h文件中没有任何声明。

-(BOOL) isEqual:(AddressCard *)theCard
{
    if ([self.name isEqualToString:theCard.name]==YES && 
        [self.email isEqualToString: theCard.email] ==YES)      
        return YES;
    return NO;
}       

-(NSComparisonResult) compareNames:(AddressCard *)theCard
{
    return [self.name compare:theCard.name]; //default is ascending
}
我在这里错过了一些东西。 ??

2 个答案:

答案 0 :(得分:3)

是的,你应该让它们保持同步。但是,Objective-C是一种动态语言,可以支持在运行时查找方法,因此建议使用标头声明,但不是必需的。

需要注意的一点是,如果您尝试从.m文件中的方法定义上方调用尚未在.h文件中定义的方法,gcc将发出警告 - gcc无法知道它存在。这又是一个警告而不是错误,因为Objective-C是一种在运行时绑定方法的动态语言。

答案 1 :(得分:1)

您不需要在.h中声明方法,除非它们将被其他类访问(将其视为您的公共API)。

然而,值得注意的是,在.m文件中,订单很重要。如果你定义-foo然后在文件中定义-bar,-bar可以调用-foo。但是,如果-foo尝试调用-bar,编译器会抱怨,除非在-foo的定义之前声明了-bar。此声明可以在.h文件中,也可以在.m。

中更早