2010-06-21 118 views

回答

56

Official Documentation

正式和非正式協議

有兩種不同的協議, 正式和非正式:

  • 非正式協議是NSObject的一個類別,其中暗含 使得幾乎所有的對象採用者 該協議。 (一個類別是一個 語言功能,使您可以將 添加到類中,而無需 對其進行子類化。)在非正式協議中實施 方法的可選項爲 。在調用方法之前,調用對象檢查 目標對象是否實現了 它。在Objective-C 2.0中引入可選協議方法 之前,非正式協議對於 基本和AppKit類 實施委派的方式至關重要。

  • A 正式協議聲明客戶端類別 預計將實施的方法列表。正式的 協議有自己的聲明, 採用和類型檢查語法。 您可以使用@required和@optional 關鍵字指定需要實現的方法或可選的 。子類繼承其祖先採用的正式的 協議。 正式協議也可以採用其他協議。

正式協議是對Objective-C語言的擴展 。

+1

所以「非正式協議」只是另一個類別的名稱? – Stas 2014-02-13 14:04:50

+6

與谷歌相比,蘋果的文檔可怕。 – 2014-07-02 08:19:51

+3

@JohnDoe vey非常認同,蘋果文件是殺手鐗。 – 2014-07-11 03:44:28

2

Objective-C語言提供了一種方法來正式聲明方法列表(包括聲明的屬性) 作爲協議。語言和運行時系統支持正式的協議。例如, 編譯器可以根據協議檢查類型,並且對象可以在運行時反省以報告是否它們符合協議 。

11

非正式協議Category(實現可以可選)

正式協議Extension(實現是可選的,必需的)

+0

類別方法的實現是否可選?我不這麼認爲,因爲我評論了一個方法實現,並立即發現錯誤「方法定義爲'xxxmethod'丟失」。 xxx方法在.h文件中聲明。 – selva 2016-09-30 21:09:54

+1

描述差異的最簡單方法。 – Warewolf 2017-11-13 09:26:32

相關問題