2013-02-19 61 views
2

我正在閱讀Stephen G. Kochan的「Objective C中的編程」,並在第11章中介紹了一些有關類別,協議,授權和非正式協議的內容。現在瞭解協議和代表之間的關係

,他只是討論了一些關於他們的每個人,它讓我更糊塗了......我知道,代表團中的obj c中的最重要的課題之一,它與協議一起去。

請幫忙,這對我很重要,所以我不會搞砸了。 TNX

+1

這個問題不適合SO,很可能很快就會關閉。但是,我建議你研究一下你不瞭解的其他來源的領域,因爲它們對於正確理解現有的類並在自己的代碼中創建最好的類非常重要。 – lnafziger 2013-02-19 22:38:04

+0

這是一個偏離主題,但答案是「儘可能早」:假設你想用它來編程一個iOS或OS X,你想要立即瞭解代表,至少在表面上是很膚淺的。當你準備好時你可​​以更深入,但是早點開始是個好主意。 – dasblinkenlight 2013-02-19 22:38:19

+0

你碰巧知道Java嗎? obj-c中的協議有點類似於Java中的接口。在這兩種語言中都沒有多重繼承。一個協議描述了一個類提供但是沒有繼承的一組方法。所以第二類可以知道某些方法是否可用。代表團只是使用某些回調函數的協議。所以如果一個控制器創建一個表,表想知道從哪裏獲取數據。控制器然後是或命名一個委託,它提供了將數據提供給表的方法。基本上就是這樣。 – 2013-02-19 22:40:46

回答

4

我會試着解釋代表團您。當你知道的時候真的很簡單,但是你需要時間才能把握住它!

假設您有兩個類,一個執行計算的Calculator類和一個用於向用戶呈現計算結果的CalculatorScreen類。 Calculator類應該告訴CalculatorScreen何時完成了計算,以便後者可以更新UI。

A 協議提供了一種方法來定義一組與特定名稱有某種關聯的方法。你可以有一些中的計算器類稱爲CalculatorDelegate協議定義方法,但實現在別處定義的方法。

定義協議(在這種情況下,計算器)的類可以告訴委託(一個對象,該符合到協議 - 在這種情況下CalculatorScreen)以實現該方法。計算器類可能會完成一個加法計算並告訴它的委託(屏幕)進行更新。你找到我了嗎?

對不起,因爲我在寫我意識到這是很難解釋,並與每一個試圖筆者同情!

iOS示例: 當您設置了iPad的顯示屏上的表,您使用的UITableView類。但是這個班級不知道表格的標題是什麼,或者有多少章節和行,或者填寫什麼內容。因此,它通過定義名爲UITableViewDataSource和UITableViewDelegate的協議將責任委託給您。當UITableView需要知道某些信息(例如行數)時,它會在委託(您自己的類)上調用適當的方法,委託類包含協議中定義的那些方法的實現。

在回答你的問題,我就把你的書了一下,開始編碼你在一個虛擬的應用到目前爲止學到的知識!最好的學習方法是(至少對我來說)。

+0

真棒回答亞當謝謝!我正在練習,每章後都有大約10次練習。但本章末尾的唯一練習就是分類.. @ AdamWaite – MNY 2013-02-19 23:27:49