根据Best way to define private methods for a class in Objective-C,我一直在类扩展中声明私有方法。
但是,我刚刚意识到,在Xcode 4中,如果我完全省略私有方法的声明并实现它,应用程序将编译并运行而不会发出警告或错误。
那么,我是否应该在类扩展中声明私有方法呢?
为什么我们必须要声明方法呢?在Java中,你不会......在Ruby中。
答案 0 :(得分:10)
如果在方法之前声明了调用者,则只需要定义方法定义。为了保持一致性,我建议在扩展中定义私有方法。
-(void)somemethod
{
}
-(void)callermethod
{
//No warning because somemethod was implemented already
[self somemethod];
}
-(void)callermethod2
{
//Warning here if somemethod2 is not defined in the header or some extension
[self somemethod2];
}
-(void)somemethod2
{
}
答案 1 :(得分:5)
在v4.3之前,Joe已经为Xcode正确回答了这个答案。但是,在v4.3及更高版本中,不仅不需要声明私有方法,而且声明顺序现在无关紧要。有关详细信息,请参阅:
答案 2 :(得分:2)
这将编译并运行正常,不需要声明:
- (void)foo {
}
- (void)bar {
[self foo];
}
但最后我检查过,这会发出警告:
- (void)bar {
[self foo];
}
- (void)foo {
}
换句话说,就像在C中一样:如果定义在任何使用之前出现,则不需要声明。 C要求这样做以避免必须向编译器添加额外的传递(一个用于查找函数,另一个用于实际解析它们)。至于你是否应该在没有必要时声明它们,这取决于你正在使用的代码库的风格。
对于不需要声明的其他语言,有些语言只是继续进行额外的传递,而其他语言则不需要在编译时知道参数的数量和类型或返回类型(它们查找函数在运行时,或者他们没有强类型变量开始,所以它不“重要”)所以他们可以跳过它。