根據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