2011-07-20 42 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需要這樣做以避免必須向編譯器添加額外的傳遞(一個用於查找函數,然後是一個用於實際解析它們)。至於你是否應該在不需要的時候聲明它,這真的取決於你正在使用的代碼庫的風格。

對於其他不需要聲明的語言,有些只需要額外的傳遞,而另一些則不需要在編譯時知道參數的數量和類型或返回類型(它們查找而是在運行時運行,或者它們沒有強類型變量,所以它不會「重要」),因此它們可以跳過它。

相關問題