2012-06-30 80 views
2

我正在Xcode中使用Objective-C。我想知道是否有任何機制來驗證您的代碼,以確保所有的函數和方法都在.h文件或private @interface方法中聲明?如何自動驗證xcode中聲明的所有方法

爲了澄清我將在編碼切線,將在我的viewController.m文件

- (Awesome*) generateAwesomeOfMagnitude:(NSFloat)magnitude { ... 

直接寫一個方法,我會忘了標題添加到viewController.h文件。如果這是一個私有方法,則沒有任何通知我已經完成了這個操作,因此我必須回過頭來驗證在完成後所有內容都是手動聲明的。有沒有辦法自動檢查?

注:我希望讓編譯器發出警告。有沒有一個設置是我應該問的。

+0

試圖建立該項目通常會顯示此類錯誤。 – Raspu

+0

如果我不從外部視圖控制器調用此方法,則不需要。 – RachelC

回答

0

要檢查方法在運行時使用類

if([yourObject respondsToSelector:@selector(generateAwesomeOfMagnitude:)]) 
    //has this method 
else 
    //does not have this method 

存在,但你沒有得到任何警告,如果定義在.M的方法和不包括在.h文件

但是,如果另一個班級正在訪問未在.h文件中聲明的方法,您將收到警告

+0

我正在尋找一種方法來讓編譯器發出警告。將編譯器設置爲嚴格嗎? – RachelC

+0

nope我不認爲你可以這樣做,但是你爲什麼需要它,如果你需要一個函數被其他類訪問,那麼你應該將它添加到.h文件,否則不要將所有的方法聲明添加到。 h文件 –

+0

好吧,我只是覺得你真的應該爲每種方法添加一個privet聲明,即使在技術上沒有它的程序運行。我想徹底/整潔。 – RachelC

3

Omar的答案正確 - 詢問對象是否會響應選擇器是探測對象的首選方法看看他們是否會迴應方法在運行時。但是,該問題詢問「如何自動驗證所有方法已被聲明?」 (推測在編譯時間)。答案是,不用自己寫點東西,你不能自動做到這一點。

這是Objective-C「動態」的一部分。你不必在任何地方聲明一個方法。這使事情成爲可能,如:

id anUnknownObject = [[NSClassFromString(whoKnowsWhatIllBe) alloc] init]; 
[anUnknownObject performSelector:@selector(whoKnowsWhatIllDo)]; 

這意味着,例如,你可以僅僅基於字符串獲取來自Web服務的字符串和實例化一個類(當然這個類必須圍繞在運行時,爲了被實例化,但編譯器沒有線索)。

這並不代表你應該這種方式編程,但它意味着它是可能的,並且與大多數情況一樣,有合適的用例,它對語言有很大的區別。它促進了極端解耦,多態和噸 - 樂趣模式。

在.m類擴展中聲明私有方法通常被認爲是最佳實踐,但其值是程序員而不是編譯器。有些(包括Objective-C的主要貢獻者,暫時在公共論壇中無名)也建議不需要在單個文件中鍵入所有方法的名稱兩次(較少的代碼,更少的錯誤 - 如果你第一次看別人的課程,可以多滾動一下)。有一個很好的n-tidy公共API正是頭的用途。有一個乾淨的實施是重要的,但假設是,一旦你在米,你是在私人領土無論如何。滾動。查看方法名稱是什麼。

相關問題