根据在 Objective-C 中为类定义私有方法的最佳方式,我一直在类扩展中声明私有方法。
但是,我刚刚意识到,在 Xcode 4 中,如果我完全省略了私有方法的声明并只实现它,应用程序将编译并运行而不会发出警告或错误。
那么,我是否应该费心在类扩展中声明私有方法?
为什么我们必须声明方法呢?在 Java 中,你不会……在 Ruby 中也不会。
根据在 Objective-C 中为类定义私有方法的最佳方式,我一直在类扩展中声明私有方法。
但是,我刚刚意识到,在 Xcode 4 中,如果我完全省略了私有方法的声明并只实现它,应用程序将编译并运行而不会发出警告或错误。
那么,我是否应该费心在类扩展中声明私有方法?
为什么我们必须声明方法呢?在 Java 中,你不会……在 Ruby 中也不会。
仅当调用者在方法之前声明时才需要定义方法定义。为了保持一致性,我建议在扩展中定义您的私有方法。
-(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
{
}
在 v4.3 之前,Joe 已经为 Xcode 正确回答了这个答案。但是,在 v4.3 及以上版本中,不仅私有方法不需要声明,而且声明顺序现在无关紧要。有关详细信息,请参阅:
这将在没有声明的情况下编译并运行良好:
- (void)foo {
}
- (void)bar {
[self foo];
}
但最后我检查了一下,这会发出警告:
- (void)bar {
[self foo];
}
- (void)foo {
}
换句话说,就像在 C 中一样:如果定义在任何使用之前,则不需要声明。C 需要这样做以避免必须向编译器添加额外的传递(一个来查找函数,然后一个来实际解析它们)。至于是否应该在不需要时声明它们,这实际上取决于您正在使用的代码库的风格。
至于其他不需要声明的语言,有些只需要额外的传递,而另一些则不需要在编译时知道参数的数量和类型或返回类型(它们在运行时查找函数而不是,或者他们没有以强类型变量开头,所以它不“重要”)所以他们可以跳过它。