回答
類可用作根據該類的特定實現創建一個或多個對象的藍圖。 一個很好的比喻是切割黃油曲奇的一種形式。表單的屬性(形狀,大小,高度)定義了可以用它切出的cookie。你只有一個表單(類),但是你可以用它創建許多cookie(該類的實例,即對象)。所有的cookies都基於特定的形式。 類似地,作爲該類的實例的所有對象的屬性都是相同的。
類=數據和方法(特殊功能),所有詭辯捆綁在一起。
類定義,有什麼自己的內心內容(數據)是+,他們可以做什麼樣的工作(方法)的。 內容基於變量,這些變量包含各種數字類型,字符串,常量以及其他更復雜的內容+方法,這些方法是(執行時)用各種數據執行一些計算操作的代碼塊。
在類中定義的所有方法有其 定義 - 定義方法的名稱+什麼(如果有的話)的數據的方法都在處理什麼(如果有的話)數據的方法吐出來了由別人處理。在類中定義的所有方法也有執行 - 提供處理的實際代碼 - 它是方法的內部工作..內部有處理數據的代碼,也可以請求其他方法處理數據。所以這個班是編程中非常高貴的一種。
如果你瞭解上述內容,你將會明白協議是什麼。
的協議是一組一個或多個方法聲明和該組都有一個名稱和表示協議。我說聲明,因爲一起由特定協議定義的方法,沒有定義任何實現代碼。。唯一存在的就是他們的名字。 請看上面 - 在課堂上,您不僅定義了課堂上有什麼方法,還定義瞭如何完成這些工作。但協議中的方法沒有任何實現。
讓我們再次有一個現實生活的比喻,它有幫助。如果你來我家住一週,你需要遵守我的TidyUp協議。 TidyUp協議定義了三種方法 - 每天清洗碗碟,清潔房間併爲新鮮空氣通風。這三種方法,我定義他們......你會做的。但我絕對不在乎,實現應該如何,我只是名義上定義方法。你會實現它們,即你定義了這些工作的細節(這些方法)是怎麼樣的。我只是說,堅持我的協議,並按照您認爲合適的方式實施。
壓軸 - 你可以聲明一些類。你也可以單獨聲明一個協議。然後你可以聲明,除了它自己的方法外,這個類將採用或遵守該協議,即。該類將實現協議的方法。
協議是一組方法***聲明***,而不是像您所解釋的_definitions_。 –
協議定義了一類可以做,像Java中的接口或者C#
類是實際執行,沒有工作。
夠簡單嗎? :)
協議很像Java和其他語言中的接口。把它看作是描述其他類同意實現的接口的契約。它可以定義一個實現類將實現的必需和可選方法的列表。與類不同,它不提供這些方法的自己的實現。
類和協議之間的主要區別在於寫入協議對實現委託方法很有用。
例如我們有A類和B類,我們想從B類調用類A的方法
可以這篇文章
在閱讀的一個非常有價值的例子http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html
閱讀代碼是勝過千言萬語;-)
,幫助我走出我第一次不得不use'em
與其他語言相比稍差。一個接口(相當於一個Java/C++類)定義了對象的數據佈局,並且可以定義它們方法的一些子集(當然包括定義整個集合的可能性)。協議只定義了一個方法子集,沒有數據定義。
重要的是一個接口只能從一個其他接口繼承(當然,它可以從繼承自繼承的接口繼承的接口繼承),但接口可以實現任意數量的協議。因此,沒有公共繼承的兩個不同的接口(NSObject除外)都可以實現相同的協議,從而「證明」它們提供相同的功能。 (儘管使用Objective-C,你可以用一些技巧調用一個接口的方法,這些方法在接口聲明或協議中都沒有外部聲明,因此協議在某種程度上只是「語法糖」或某種程度上的)。
The Objective-C Programming Language從所述的滑動詞語解釋簡單協議的目的:
協議聲明可以由任何類來實現的方法。 協議至少在三種情況下是有用的:
- 要聲明的是,其它公司有望實現
- 要將接口申報的對象,而隱藏其類
- 爲了不在類中捕獲的相似方法分層相關
所以,聲明方法,但沒有提供實現協議。預計採用協議的類將實現協議的方法。
授權是協議有用的一個很好的例子。考慮一下,例如,UITableViewDataSource協議。任何類都可以採用該協議,並且任何類都可以用作表的數據源。表視圖不關心什麼樣的對象作爲其數據源;它只關心充當數據源的對象實現一組特定的方法。你可以爲此使用繼承,但是所有的數據源對象都必須從一個公共基類(比NSObject更具體)派生。相反,使用該協議,可以讓表格指望能夠調用諸如-tableView:willBeginEditingRowAtIndexPath:
和-tableView:heightForRowAtIndexPath:
之類的方法,而無需知道關於數據源的其他任何信息。
- 1. ejabberd中MAM協議的0和1之間有什麼區別?
- 2. REST和HTTP協議有什麼區別?
- 3. WebSocket和STOMP協議有什麼區別?
- 4. 方法和協議有什麼區別
- 5. WebSockets版本之間的協議區別是什麼?
- 6. GCKDeviceManager協議 - 是什麼didDisconnectWithError之間的區別:和didDisconnectFromApplicationWithError :?
- 7. uwsgi協議和wsgi協議有什麼區別?
- 8. MQTT和MODBUS協議之間的區別?
- 9. FIX和FAST協議之間的區別?
- 10. 協議和代表之間的區別?
- 11. DesiredCapabilities與RequiredCapabilities之間有什麼區別?
- 12. Console.WriteLine()與Debug.WriteLine()之間有什麼區別?
- 13. gets.chomp()與STDIN.gets.chomp()之間有什麼區別?
- 14. Clojure協議和Groovy類別之間的區別
- 15. Git Native協議或SSH協議之間的區別推送
- 16. C#接口與Objective-C協議有什麼區別?
- 17. Tcp協議和遠程過程調用之間有什麼區別?
- 18. 類圖與對象圖之間有什麼區別?
- 19. 有什麼實體約束和協會之間的區別?
- 20. 這些術語之間有什麼區別:「協會」和「關係」?
- 21. 用戶級線程和協程之間有什麼區別?
- 22. webhdfs://和hdfs://之間在底層協議方面有區別嗎?
- 23. 繼承與類別有什麼區別
- 24. 「層」和「層」之間有什麼區別?
- 25. Tableau和QlikView之間有什麼區別
- 26. Microsoft.CompilerServices.AsyncTargetingPack和Microsoft.Bcl.Async之間有什麼區別?
- 27. @Entity和@embeddable之間有什麼區別
- 28. ContentObservable和DataSetObservable之間有什麼區別?
- 29. touchmove和gesturechange之間有什麼區別?
- 30. 這兩行之間有什麼區別?
您是否熟悉其他面向對象的編程語言,比如Java,C++或C#?提供一種與另一種語言相似的比較容易,而不是從頭開始解釋。 – dasblinkenlight