根据Best way to define private methods for a class in Objective-C,我已经在类扩展中声明了私有方法。Objective-C:我应该声明私有方法吗?
但是,我刚刚意识到,在Xcode 4中,如果我完全忽略了私有方法的声明并仅实现它,则应用程序将编译并运行而不会出现警告或错误。
那么,我是否应该在类扩展中声明私有方法?
为什么我们不得不声明方法呢?在Java中,你不......在Ruby中。
根据Best way to define private methods for a class in Objective-C,我已经在类扩展中声明了私有方法。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
{
}
哪一类? –
哦,傻了。谢谢:) –
不是一个类别和一个扩展稍有不同。在扩展中,你可以添加ivars,如果你没有实现你在扩展中声明的方法,编译器会呻吟。我确定他们有其他的不同,但这些是我利用的。 –
这将编译并没有声明运行良好:
- (void)foo {
}
- (void)bar {
[self foo];
}
但最后我检查,这将给出警告:
- (void)bar {
[self foo];
}
- (void)foo {
}
换句话说,它只是像在C :如果定义在任何使用之前出现,则不需要声明。 C需要这样做以避免必须向编译器添加额外的传递(一个用于查找函数,然后是一个用于实际解析它们)。至于你是否应该在不需要的时候声明它,这真的取决于你正在使用的代码库的风格。
对于其他不需要声明的语言,有些只需要额外的传递,而另一些则不需要在编译时知道参数的数量和类型或返回类型(它们查找而是在运行时运行,或者它们没有强类型变量,所以它不会“重要”),因此它们可以跳过它。
这个答案已经由v4.3之前的Joe正确回答了Xcode。但是,在v4.3及以上版本中,不仅需要声明私有方法,而且现在声明顺序也是不相关的。有关详细信息,请参阅:
那么你不能让Xcode的,除非你声明它们自动完成的方法。 – thelaws