2012-10-07 72 views
4

假設我正在創建一個名爲例如myTextView的UITextView的子類。我會讓這個班級成爲自己的代表。所以,我需要實現代表方法,如iOS - 這是一個類內的聲明是否正確?

- (void)textViewDidBeginEditing:(UITextView *)textView { 

我應該像這樣聲明這種方法嗎?

- (void)textViewDidBeginEditing:(myTextView *)textView { 

在我看來,像遞歸,因爲我myTextView類中,定義是指本身就是一個代表...

什麼是正確的做法?謝謝。

+2

要麼將​​工作(假設'myTextView'是派生類的名稱)。但首先是慣例。 (順便說一下,Objective-C中的類名應該以大寫字符開頭。) –

回答

4

只是爲了澄清是更好地實現方法等在協議中定義:

- (void)textViewDidBeginEditing:(UITextView *)textView 

如果您實現您的自定義類型或任何類類型的協議的方法,該方法仍然會被調用,因爲沒有進行類型檢查。該參數實際上是您的自定義子類。不管怎麼說,並再次澄清,我建議如果你想處理您的自定義子類的實例變量有一個內鑄:

- (void)textViewDidBeginEditing:(UITextView *)textView { 
    MyTextView * myTextView = (MyTextView *)textView; 
    ... 
} 
+1

「在其他情況下,它們不會被調用,因爲您的類不符合協議。」不正確,因爲'respondsToSelector:'用於檢查 - 它不關心類型,只關心方法名稱。 – 2012-10-07 21:11:11

+0

太好了,謝謝! – SpaceDog

+0

H2CO3,你說得對,它沒有執行任何類型的檢查。無論如何,值得使用協議聲明以避免混淆(並且容易出錯,至少在默認情況下不會出現錯誤),因爲您將得到一個UITextView作爲參數,而不是您的聲明的子類高德。 – atxe