2014-04-02 20 views
0

我有一個簡單的問題要問。爲什麼代理工作也沒有在接口文件中定義它?

我有一個ViewController使用UITableView來顯示事物列表。該UITableView的代表們在此視圖控制器(使用數據源=自我,等等。)

在我知道我需要使用來定義界面委託類的所有教程:

@interface Class : SuperClass <ClassNameDelegate> 

但是,所有的代碼沒有聲明這一點並且只實現方法,它也能很好地工作。例如:

@interface Class: SuperClass 

是一個錯誤?無論如何我需要聲明它?

謝謝。

莫羅

+0

你能解釋一下多一點?你究竟想要實現什麼? – Nilesh

+0

具體說明類和超類的名稱。你有沒有得到任何警告(你應該)。 – Wain

+0

「ClassNameDelegate」實際上是一個協議。也就是說,你的類應該實現的方法符合協議。通常,這與代表一起使用,以便爲班級提供其他功能。如果您在頭文件中聲明瞭沒有協議的方法,那麼它會在大多數時間工作,因爲許多實現正在檢查您的類是否響應某些選擇器。 –

回答

0

在通常情況下,我們使用performSelector調用委託方法是這樣的:

[(NSObject *)_delegate performSelector:@selector(storeFeedbackViewControllerWasDismissed)]; 

,一切工作,因爲這代表有沒有這種方法。

但最好指出該類符合協議,因爲XCode可以警告您實現所需的代理方法,您可能會錯過。

0

有三個時刻:

  1. 此致第二類將返回NO呼叫conformsToProtocol:@protocol(ClassNameDelegate)
  2. 如果ClassNameDelegate都需要的方法,如果它沒有實現報應方法,你不會得到編譯第二類錯誤。
  3. 你將得到一個警告,如果嘗試分配第二類對象id<ClassNameDelegate>
+0

謝謝。這都是正確的。 –

相關問題