2013-01-17 33 views

回答

1

我不太明白這個問題的重點。您同樣可以宣告它們放在一起:

-(void)foo; 
+(void) bar; 
void bar(); 

所有的都在目標C合法,因爲它們是不同的實體(實例方法,類方法,C函數)具有相同的名稱可以共存。您可以從前者中的任何一個調用void bar()而不發出問題,但不能以v/v作爲void bar()不傳遞對self的引用。

如果問題是一個頗具風格的問題,我會將C函數與@interface分開聲明,因爲它們不是Objective-C。

隨着最新版本鏘的就沒有必要在所有的,如果他們不供公衆使用聲明這些...

更新

讀過@ Jano的的回答,我現在明白了點問題多一點:爲什麼選擇一個類方法而不是可以達到相同結果的函數(既不能訪問self)。現在我傾向於總是使用類方法,它似乎在obj-C語境中是有意義的。 Jano的答案似乎很詳盡,爲什麼。

+0

這純粹是一個風格的問題是。我可能會在@interface之外聲明它們,但是在同一個頭文件中。 如果它們是私人的,我會在實現的源文件中聲明它們是'static'。 – Minthos

0

它只是一個用過的東西。

我會去的Objective-C風格的方法,除非我需要一些功能,只有像C(如pow)中可用。

即使你想添加一個C方法,我覺得它應該在一個單獨的文件中,因爲AllCMethods.c回憶,記住,使用所有的obj-c方法和C方法會更容易。

2

關注選擇C函數或靜態方法時:(從我的頭頂)

  • 名稱衝突:不想靜態方法。
  • 功能性:名稱就像道路,它們告訴你你在哪裏以及你可以去哪裏。如果代碼與其他東西相關,則應該使其成爲類方法。即使是非相關方法的垃圾場(xxxUtils類)。否則使用C函數。
  • 地理位置:優先使用靜態方法將代碼分組到更高級別的單元(因爲從30,000英尺更容易看到和理解)。
  • 打字:C函數需要的更少。 CGPointMake便利功能對於更多的輸入來說不會那麼方便。
  • 鏈接:在運行前看到對C函數的錯誤調用。
  • 全局狀態:不是一個選擇標準,但值得說明的是,在OOP語言中,C函數和類方法的輸出應該僅取決於它們的輸入。觸摸全局狀態違背封裝,隱藏依賴關係,使代碼更難理解等。
  • 重載:使用__attribute__((overloadable))標記C函數時可能會重載。
+0

感謝您的輸入。好,客觀。現在我想要一個好的主觀來補充它:) – Minthos