2011-07-20 40 views
8

根据Best way to define private methods for a class in Objective-C,我已经在类扩展中声明了私有方法。Objective-C:我应该声明私有方法吗?

但是,我刚刚意识到,在Xcode 4中,如果我完全忽略了私有方法的声明并仅实现它,则应用程序将编译并运行而不会出现警告或错误。

那么,我是否应该在类扩展中声明私有方法?

为什么我们不得不声明方法呢?在Java中,你不......在Ruby中。

+1

那么你不能让Xcode的,除非你声明它们自动完成的方法。 – thelaws

回答

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 
{ 
} 
+0

哪一类? –

+0

哦,傻了。谢谢:) –

+0

不是一个类别和一个扩展稍有不同。在扩展中,你可以添加ivars,如果你没有实现你在扩展中声明的方法,编译器会呻吟。我确定他们有其他的不同,但这些是我利用的。 –

2

这将编译并没有声明运行良好:

- (void)foo { 
} 

- (void)bar { 
    [self foo]; 
} 

但最后我检查,这将给出警告:

- (void)bar { 
    [self foo]; 
} 

- (void)foo { 
} 

换句话说,它只是像在C :如果定义在任何使用之前出现,则不需要声明。 C需要这样做以避免必须向编译器添加额外的传递(一个用于查找函数,然后是一个用于实际解析它们)。至于你是否应该在不需要的时候声明它,这真的取决于你正在使用的代码库的风格。

对于其他不需要声明的语言,有些只需要额外的传递,而另一些则不需要在编译时知道参数的数量和类型或返回类型(它们查找而是在运行时运行,或者它们没有强类型变量,所以它不会“重要”),因此它们可以跳过它。

相关问题