2010-04-09 53 views

回答

7

由於Objective-C中的方法查找是在運行時完成的,因此編譯器會禁止類接口中的方法聲明(以抑制警告),並且不是編譯時。

+0

爲了編譯器做什麼用?當我忽略它們時,肯定會有一些區別。如果我提供反對定義的論據,它是否會引發警告?它能生成更快的代碼嗎? 哦,你編輯它。 – Halpanger900 2010-04-09 22:01:41

+2

編譯器將檢查你調用的方法是否在它知道的任何類接口中聲明。如果它找不到它,它會發出一個警告,但這不一定是錯誤,因爲該方法調用的實際查找是在Objective-C運行時在運行時完成的,並且該方法實際上可能不會在編譯時(可以使用Objective-C運行時方法來做些事情,例如在運行時動態地向類中添加方法)。 – 2010-04-09 22:06:02

0

Perspx是正確的。

嘗試XCode中建立這樣的:

@implementation SomeClass 
-(void)awesomeMethod { 
    [self notAwesomeMethod]; 
}  

-(void)notAwesomeMethod {} 
@end 

您應該看到說警告 'SomeClass的' 可能不響應 '-notAwesomeMethod'。嘗試反轉方法定義的順序...沒有錯誤,因爲notAwesomeMethod現在已經定義,因此編譯器知道它。類接口預先做到這一點。

這也是很好的行爲,因爲您可以選擇僅公佈該類的公共接口,並保留.h文件中的任何內部私有方法。

+0

這也不是很好的行爲,因爲如果有人瞭解你的私人方法,他們實際上是可用的,你只是得到警告...... – 2010-04-16 20:31:09

相關問題