我开始使用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
}
我在这里错过了一些东西。 ??
答案 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。
中更早