2011-06-24 70 views
7

在objective-c中,如何使錯誤選擇器生成編譯時錯誤?使錯誤選擇器生成編譯時錯誤

例如,說我有這個

@selector(some_misnamed_func) 

而且我班有這個成員

-(void)some_func 

我想Objective-C的編譯器告訴我,它無法找到該功能在編譯時間,而不是僅在運行該代碼時生成運行時異常。

回答

10

在Xcode的構建設置中將代碼編譯爲-Wundeclared-selector未聲明的選擇器。由於這只是一個警告,您可以將它與-Werror(其中將治療警告視爲Xcode中的錯誤)相結合,以使該警告(和所有其他警告)表現爲錯誤並有效地中止編譯。

+0

+1有趣。但是這將不考慮Objective-C的動態性,不是嗎? –

+1

不是真的;只要選擇器被聲明爲*某處*,就可以。鑑於參數/返回值的C類型系統的污點,試圖動態調用無類型的泛型選擇器無論如何都是一個痛苦的世界。 – bbum

6

如果在可見文件中沒有這樣的選擇器,編譯器會發出警告。如果你將警告視爲錯誤,你會得到一個很好的錯誤。問題是,如果你錯誤地選擇了一些其他現有的選擇器(即使是完全不同的類),編譯器也不會說出任何事情。這是由於late binding,編譯器無法知道類將在運行時響應的所有消息。

+0

謝謝 - 接受Bavarious的回答作爲答案,但是+1,因爲它也很好。 – sashang