2010-05-16 37 views
8

我是C#開發人員開始使用Objective-C/Cocoa Touch編程。我想我可能會因爲我一直在考慮他們的「C#方式」而犯了一些錯誤的話。 具體來說,我在各種文檔和教程中已經談到了「協議」這個術語。Objective-C/Cocoa文檔中的「採用協議」是什麼意思?

在Objective-C中,協議究竟是什麼?它可以與C#界面進行比較嗎?

以下聲明與說「該類正在實現協議UITextFieldDelegate」相同嗎?或者是將UITextFieldDelegate與C#中的泛型類型參數進行比較?

@interface MyViewController : UIViewController <UITextFieldDelegate> { } 
+2

Objective-C協議== C#接口 – 2010-05-16 16:01:18

回答

7

在Objective-C一protocoll是用於選擇/方法的集合名稱,就像Java中的接口聲明(也可能在C#)。

@interface MyViewController : UIViewController <UITextFieldDelegate> { } 

意味着從類UIViewController類繼承MyViewController和採用/實現協議UITextFieldDelegate

這意味着MyViewController必須實現在UITextFieldDelegate中聲明的所有方法。

編輯:引入Objective-C 2.0似乎可以標記協議的方法爲@optional@required。 請參閱Apples Objective-C documentationOptional Protocol Methods部分。

有用的鏈接來自wikibooks關於Objective-C Protocols

+0

我覺得你對最後一句話是錯的。它不能實現所有的方法,但它可以實現它們 - 至少這就是文檔所說的,也是我目前在我的代碼中所做的。 – driis 2010-05-16 16:08:24

+0

除此之外,感謝您的明確答案:-) – driis 2010-05-16 16:10:37

+0

我認爲Objective-C 2.0的引入改變了這裏。 但是使用「舊」的Objective-C語義,一個類必須實現採用的協議中的所有方法。 – MKroehnert 2010-05-16 16:12:28

1

協議在某些方面就像一個接口。 如果您在協議中聲明瞭某些方法是可選的,那麼該類採用它並不需要實現這些方法。如果沒有,班級必須執行它。

相關問題